ADDED_TO_STAGE函数从未调用过

时间:2015-03-12 07:28:43

标签: actionscript-3 flash

我有这个课程,应该从舞台上取一个按钮( xBtn )。

package com.stx.utils {

    import flash.display.MovieClip;
    import flash.events.*;

    public class STXbutonx extends MovieClip {

        private var xBtn  : MovieClip;

        public function STXbutonx() {
            addEventListener(Event.ADDED_TO_STAGE, init);           
        }

        private function init(e:Event=null) : void {
            trace("int!"); //this is never called
            xBtn = stage.getChildByName('ics') as MovieClip;
            xBtn.addEventListener(MouseEvent.CLICK, onX);
            removeEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function onX(e:MouseEvent) : void {
            trace("x Clicked!");
        }
    }
}

在Document类中我这样调用:

import flash.display.MovieClip;
import com.stx.utils.*;

public class Main extends MovieClip {

    var xx : STXbutonx;

    public function Main() {    
        xx = new STXbutonx();
    }
}

为什么我的init函数永远不会被调用?
谢谢!

1 个答案:

答案 0 :(得分:1)

因为你从未将它添加到舞台上。

将您的Document类更改为

public function Main() {    
    xx = new STXbutonx();
    addChild(xx);
}

Main保存对舞台的引用,向Main添加子项将子项添加到舞台。因此,STXbutonx中的事件监听器将触发。


  

xBtn = stage.getChildByName(' ics')为MovieClip; //现在我有未定义属性阶段的访问权限......

您无法访问舞台,因为STXButon不在舞台上,它不是DisplayObject。要解决这个问题,请执行以下操作:

包com.stx.utils {

import flash.display.MovieClip;
import flash.events.*;

public class STXbutonx{

    private var xBtn  : MovieClip;
    private var stage : Stage;

    public function STXbutonx(stage:Stage) {
        this.stage = stage;
        init();           
    }

    private function init() : void {
        trace("int!");
        xBtn = stage.getChildByName('ics') as MovieClip;
        xBtn.addEventListener(MouseEvent.CLICK, onX);
        removeEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function onX(e:MouseEvent) : void {
        trace("x Clicked!");
    }
}

}

当然

import flash.display.MovieClip;
import com.stx.utils.*;

public class Main extends MovieClip {

var xx : STXbutonx;

public function Main() {    
    xx = new STXbutonx(stage);
}

}