Как я могу получить доступ к мувиклипу на сцене, используя класс as3? - PullRequest
4 голосов
/ 02 сентября 2011
public class MyClass extends MovieClip {
            public function MyClass():void {
                my_mc.addEventListener(MouseEvent.CLICK, action);
            }
            private function action(e:MouseEvent):void {
                trace("cliked");
            }
        }

Код временной шкалы

 var myClass:MyClass = new MyClass();
    addChild(myClass);

Я не могу получить доступ к видеоклипу my_mc (помещен в FLA).Как мне получить доступ?

Ответы [ 2 ]

7 голосов
/ 02 сентября 2011

Попробуйте это:

public class MyClass extends MovieClip
{
    public function MyClass()
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);

    }// end function

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);

        var myMc:MovieClip = stage.getChildByName("my_mc") as MovieClip;
        // var myMc:MovieClip = parent.getChildByName("my_mc") as MovieClip;

        myMc.addEventListener(MouseEvent.CLICK, onMyMcClick)

    }// end function

    private function onMyMcClick(e:MouseEvent)
    {
        trace("clicked");

    }// end function

}// end class

Если это не сработает (что, я думаю, не сработает), то потому, что ваш my_mc экранный объект не является дочерним элементом рабочей области, но является дочерним для экземпляра MainTimeline. Если это так, то просто закомментируйте следующее утверждение в приведенном выше коде:

var myMc:MovieClip = stage.getChildByName("my_mc") as MovieClip;

и раскомментируйте следующий код в приведенном выше коде:

// var myMc:MovieClip = parent.getChildByName("my_mc") as MovieClip;

Если мое предположение верно, экранные объекты my_mc и myClass имеют одного и того же родителя.

0 голосов
/ 02 сентября 2011

Если my_mc - это мувиклип на сцене MyClass, возможно, вы пытаетесь получить к нему доступ слишком рано.Код конструктора обычно выполняется до того, как нарисован первый кадр, поэтому вам нужно подождать, пока начнется рисование, прослушивая Event.ADDED_TO_STAGE:

public class MyClass extends MovieClip {
    public function MyClass():void {
        if(stage) {
            init();
        } else {
            addEventListener(Event.ADDED_TO_STAGE,init);
        }
    }

    private function init(e:Event = null):void {
        if(e) removeEventListener(Event.ADDED_TO_STAGE,init);
        stage.my_mc.addEventListener(MouseEvent.CLICK, action);
    }

    private function action(e:MouseEvent):void {
        trace("cliked");
    }
}
...