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 c开发者_C百科ode
var myClass:MyClass = new MyClass();
addChild(myClass);
I can't able to access the my_mc
(placed in FLA) movieclip. How do I access?
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.
If my_mc
is a MovieClip on the stage of MyClass, you may be trying to access it too early. Constructor code generally executes before the first frame is drawn, so you need to wait for that drawing to take place by listening for 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");
}
}
精彩评论