stage报告为空对象

stage对象是所有displayObject的共有属性,引用到舞台对象(即stage)。但很多人会忽略的是,只有displayObject放置到舞台后,displayObject.stage才能指定到舞台,不然stage属性为null,运行时报错。我们用一段代码就容易理解这是为什么:
package{
import flash.display.*;

public class mc extends Sprit {
public function mc():void{
super();
stage.displayState=StageDisplayState.FULL_SCREEN;
}
}

}

在舞台脚本的第一帐加入

import mc;

var mc:mc = new mc();

addChild(mc);

上面,我们将flash设为全屏播放,但刚运行就报错了。
这是因为我们在实例化mc时flash执行了超类代码,检测到this.stage这个对象,但因为mc还未addChild到舞台,所以stage = null,即为空对象。addChild(mc)还在下一句,因此就报错了。
你可能会说总先实例化才能加入舞台吧,不可能倒过来。没错,这个问题也有解决办法,就是监听加入到舞台的事件:
obj.addEventListener(Event.ADDED_TO_STAGE, fun)
最后变成:

package{
import flash.display.*;
import flash.events.Event;

public class mc extends Sprit {
public function mc():void{
super();
this.addEventListener(Event.ADDED_TO_STAGE, addToStage);
}
}

private function addToStage():void {
stage.displayState=StageDisplayState.FULL_SCREEN;
}
}

posted @ 2014-02-09 16:46  sumsung753  阅读(169)  评论(0编辑  收藏  举报