包中的stage.addEventListener?

时间:2010-12-29 07:17:03

标签: flex flash actionscript-3 actionscript

我正在尝试做这样的事情:

package com.clicker{
    import flash.display.*;
    import flash.events.MouseEvent;

    public class Stager extends MovieClip {

        public function clicker():void {
            stage.addEventListener(MouseEvent.CLICK, do_stage);
        }
        function do_stage(e:MouseEvent):void {
            trace("stage clicked");
        }

    }
}

但是,我得到了1009错误。

当我这样做时:

import com.clicker.*;

var test:Stager = new Stager();
test.clicker();
addChild(test); 

请帮帮我。非常感谢您提前和节日快乐。

2 个答案:

答案 0 :(得分:8)

只有将组件添加到舞台时才能访问

阶段。如果您想了解它,可以使用ADDED_TO_STAGE事件。

所以,你可以这样做:

package com.clicker{
    import flash.display.*;
    import flash.events.*;

    public class Stager extends MovieClip {

        public function clicker():void {
            addEventListener(Event.ADDED_TO_STAGE, init);
        }
        private function init(e:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            stage.addEventListener(MouseEvent.CLICK, do_stage);
        }
        function do_stage(e:MouseEvent):void {
            trace("stage clicked");
        }

    }
}

答案 1 :(得分:0)

因为您在添加到舞台test.clicker();之前调用test之前没有this.stage对象,请尝试:

public class Stager extends MovieClip {

    public function clicker():void {
       this.addEventListener( Event.ADDED_TO_STAGE , function(ev:Event) {
             stage.addEventListener(MouseEvent.CLICK, do_stage);
       });

    }
    function do_stage(e:MouseEvent):void {
        trace("stage clicked");
    }

}

希望这会有所帮助...