Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   [AS2] Работа Классов или их видимость или нужно смотреть %)) (http://www.flasher.ru/forum/showthread.php?t=73445)

__i 22.12.2005 21:19

[AS2] Работа Классов или их видимость или нужно смотреть %))
 
Проблема такая:

Есть несколько классов extends MovieClip.

Нарисованы к ним клипы, причем они вложены друг в друга - ща на пальцах покажу чтоб было ясно:

Мувик а_мс, его класс А_МС

Код:

class A_MC extends MovieClip{
var bmc:B_MC;
function set any(e){
....
bmc.any(e);
....
}
}

в него вложен мувик в_мс, его класс В_МС

Код:

class В_MC extends MovieClip{
function any(e){
trace(e);
}
}

теперь если я складываю этот мувик (А_МС) на сцену то все нормально работает, но если я атачу этот мувик функция any не срабатывает!!!

выглядит это где-то так:

this.attachMovieClip('a_mc_linkName','my_a_mc',1);
my_a_mc.any='77'

вот эта строка не отобразаеться (функция не сробатывает), почему так и как с этим бороться ?

Antares 22.12.2005 21:39

Скорее всего дело в загрузке кадров во врейме n и попытке заюзать их во фрейме m, где m < n.

И еще : глядя на такую кашу я еще больше поддерживаю классика Мука в борьбе за разделение мух и котлет, а именно визуальной части и кода. Вместо наследования от MovieClip можно было воспользоваться композицией.

__i 23.12.2005 14:01

всего используеться 1 кадр.

теперь что ты подразумеваешь под композицией?. Классы сами создают свои мувики, а не являються наследниками мувиклипа?

MOHCTEP 23.12.2005 14:04

А если так:
Код:

class A_MC extends В_MC{
По идее, мув класс будет наследоваться и так.

Antares 23.12.2005 14:04

Что-то подобное:
Код:

import com.novemberain.visual.IVisualInterface;
import mx.transitions.*;

/**
 *
 * @author
 * @version
 **/
class com.novemberain.visual.VisualObject implements IVisualInterface
{
        private var __viewport:MovieClip;
       
        function VisualObject( mc:MovieClip )
        {
                __viewport = mc;
        }
       
       
        /**
        *
        * @usage 
        * @return 
        */
        public function getVisualObject(): Void
        {
                return __viewport;
        }


        /**
        *
        * @usage 
        * @param  x
        * @param  y
        * @return 
        */
        public function move( x:Number, y:Number ): Void
        {
                trace('Object ' + __viewport + ', called move to ' + [x, y]);
               
                __viewport._x = x;
                __viewport._y = y;
        }


        /**
        *
        * @usage 
        * @param  state
        * @return 
        */
        public function changeState( state:String ): Void
        {
                if(state) __viewport.gotoAndStop(state);
        }


        /**
        *
        * @usage 
        * @param  x
        * @param  y
        * @return 
        */
        public function slideTo( x:Number, y:Number, relative:Boolean, time:Number, callback:Function ): Void
        {
                if(relative)
                {
                        var xTo:Number = __viewport._x + x;
                        var yTo:Number = __viewport._y + y;                       
                } else
                {
                        var xTo:Number = x;
                        var yTo:Number = y;
                }
               
                var xTween:Tween = new Tween(__viewport, '_x', Elastic.easeOut, __viewport._x, xTo, time, true );
                var yTween:Tween = new Tween(__viewport, '_y', Elastic.easeOut, __viewport._y, yTo, time, true );
               
                if(callback) xTween.onMotionStopped = callback;
               
                xTween.start();
                yTween.start();
        }

        /**
        *
        * @usage 
        * @return 
        */
        public function show(  ):Void
        {
                __viewport._visible = true;
        }

        /**
        *
        * @usage 
        * @return 
        */
        public function hide(  ):Void
        {
                __viewport._visible = false;
        }

}


__i 23.12.2005 14:43

2 Монстр - класс в_мс не явлдяеться наследником а_мс

Ну хорошо написал ты этот код и что дальше? или намекаешь что все мои мувики теперь должны обрастать таким VisualObject?

как это у меня сделано:

Код:

class A_mc extends MovieClip{
                var num:TextField;
                var b_mc:B_mc;
                function set mcName(e)
                {
                        this.num.text='A '+e;
                        this.b_mc.mcName =this.num.text;
                }
               
        }

Код:

class B_mc extends MovieClip{
                var num:TextField;

                function set mcName(e)
                {
                        this.num.text='B '+e;
                }
               
        }

в первом кадре 1 фрейма
Код:

my_1_mc.mcName = 'legit';

this.attachMovie('a_mc','my_2_mc',2,{_x:200});
this.my_2_mc.mcName='priatta4en ';

тут я аттачу архив с примером - - блин не загружает файл
так объясню - в библиотеке 2 клипа a_mc и b_mc - им установлены соответствующие классы и линкаджнеймы,
b_mc - внутри 1 текстовое поле, имя num и фон.

a_mc - внутри 1 текстовое поле, имя num, фон и мувик b_mc, имя b_mc.

на выходе получаем в для my_1_mc имена и там и там,
для my_2_mc имя только у a_mc, во вложеном кату имени , сеттер не сработал(и методы тоже не работаеют)

как можно это переписать чтоб всегда работало ? и при аттаче и так?

Antares 23.12.2005 14:51

Я ни на что не намекаю. Я сказал, что считаю нужным. Более того, раз ты продолжаешь говорить "все мои мувики", значит, разницу ты не уловил.

Решать только тебе.

__i 23.12.2005 15:09

объясни мне, где я неправ и почему нужно делать так как ты, а не как я в чем различие ?

__i 23.12.2005 15:48

в принципе то есть решение этой проблемы но оно очень корявое!!!!!!
Код:

var num:TextField;
                var b_mc:B_mc;
                function set mcName(e)
                {
                        this.num.text='A '+e;
                                      this.onEnterFrame = function(){
                          this.b_mc.mcName =this.num.text;
                                          delete this.onEnterFrame;
}
                }


Antares 23.12.2005 16:16

Цитата:

Сообщение от __i
объясни мне, где я неправ и почему нужно делать так как ты, а не как я в чем различие ?

Потому что так я могу добавить какую угодно функциональность, наследую класс. А функциональность визуального объекта всегда будет доступна через обращение к свойству.

Это не значит, что ты не прав. Это значит, что есть "лучшие техники", а есть просто решения.


Часовой пояс GMT +4, время: 12:18.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.