Search code examples
actionscript-3actionscriptflash-cs3

How do I access a movieClip on the stage using as3 class?


public class MyClass extends MovieClip {
            public function MyClass():void {
                my_mc.addEventListener(MouseEvent.CLICK, action);
            }
            private function action(e:MouseEvent):void {
                trace("cliked");
            }
        }

Timeline code

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

I can't able to access the my_mc(placed in FLA) movieclip. How do I access?


Solution

  • Try this:

    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
    

    If this doesn't work(which I don't think it will), its because your my_mc display object isn't a child of the stage, but the child of an instance of MainTimeline. If so, then simply comment out the following statement in the above code:

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

    and uncomment the following statement in the above code:

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

    If my assumption is correct, the my_mc and myClass display objects share the same parent.