ADDED_TO_STAGE 函数从未被调用
ADDED_TO_STAGE function never called
我有这个 class 应该从舞台上拿一个按钮 (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!");
}
}
}
在文档 class 中,我这样调用:
import flash.display.MovieClip;
import com.stx.utils.*;
public class Main extends MovieClip {
var xx : STXbutonx;
public function Main() {
xx = new STXbutonx();
}
}
为什么我的 init 函数从未被调用?
谢谢!
因为你从来没有把它添加到舞台上。
将您的文档 class 更改为
public function Main() {
xx = new STXbutonx();
addChild(xx);
}
Main 持有对舞台的引用,将子级添加到 Main 会将子级添加到舞台。因此,STXbutonx 中的事件侦听器将触发。
xBtn = stage.getChildByName('ics') as MovieClip; // now I have acces of undefined property stage...
您无权访问舞台,因为 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);
}
}
我有这个 class 应该从舞台上拿一个按钮 (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!");
}
}
}
在文档 class 中,我这样调用:
import flash.display.MovieClip;
import com.stx.utils.*;
public class Main extends MovieClip {
var xx : STXbutonx;
public function Main() {
xx = new STXbutonx();
}
}
为什么我的 init 函数从未被调用?
谢谢!
因为你从来没有把它添加到舞台上。
将您的文档 class 更改为
public function Main() {
xx = new STXbutonx();
addChild(xx);
}
Main 持有对舞台的引用,将子级添加到 Main 会将子级添加到舞台。因此,STXbutonx 中的事件侦听器将触发。
xBtn = stage.getChildByName('ics') as MovieClip; // now I have acces of undefined property stage...
您无权访问舞台,因为 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);
}
}