- public function MousebombV9Index() {
- init();
- }
- private function init():void {
- //***其他语句….
- this.addEventListener(Event.ADDED_TO_STAGE,addStageHandler);
- }
- private function addStageHandler(e:Event):void {
- //舞台左上对齐
- stage.scaleMode = StageScaleMode.NO_SCALE;
- stage.align = StageAlign.TOP_LEFT;
- }
package{
import flash.display.MovieClip;
import flash.events.Event;
public class testClass extends MovieClip{
public function testClass():void
{
this.addEventListener(Event.ADDED_TO_STAGE,onStageHandler);
}
priatve function onStageHandler(evt:Event)
{
init()
this.removeEventListener(Event.ADDED_TO_STAGE,onStageHandler);
}
priatve function init():void
{
//子SWF的主体构CODE放这里.
//对stage属性的引用
}
}//endclass
}//endpackage
这两天看AS3 cookbook和AS3的帮助文档,里面很多代码执行后都会出现“TypeError: Error #1009: 无法访问空对象引用的属性或方法。”这个错误。几经周折,才知道解决办法:使用addEventListener( Event.ADDED_TO_STAGE, enterDLHandle ),把要用的stage代码放到enterDLHandle里面,就没问题了。不知道有没有其他解决方法,知道的说声啊~
在经典论坛上提问这个问题,终于有人做出全面回答了,在此感谢zjs35
首先要明白stage是什么意思,stage是显示对象的一个引用舞台的属性,如果显示对象不在显示列表中,即没有用addChild()添加,stage等于null,你的问题就在这里。
使用stage有下面几种方法:
1、文档类的构造函数中可以直接使用stage属性
2、非文档类可以通过参数传递到类里面。
class Test extends Shape
{
function Test(stage:Stage)
{
}
}
3、不想传递参数时,要注意代码的顺序。
class Test extends Shape
{
function Test()
{
}
functon useStage()
{
trace(stage)
}
}
这样使用
var test=new Test()
test.useStage()//null,你的问题出在这里
addChild(test)//添加到显示列表后,就可以使用stage属性。
test.useStage()//[object Stage]
总之,理解stage是显示对象的属性,位于显示列表中的显示对象的stage才引用舞台
- package {
- import flash.display.Sprite;
- import flash.events.MouseEvent;
- public class button extends Sprite {
- private var f:full_screen
- public function button() {
- var _sprite:Sprite=new Sprite ;
- _sprite.graphics.beginFill(0xff0000);
- _sprite.graphics.drawRect(0,0,50,50);
- _sprite.graphics.endFill();
- addChild(_sprite);
- _sprite.addEventListener(MouseEvent.CLICK,_click);
- f=new full_screen(stage) ;
- }
- private function _click(event:MouseEvent):void {
- f.go();
- }
- }
- }
- package {
- import flash.display.Sprite;
- public class full_screen extends Sprite {
- private var stage_obj:Object;
- public function full_screen(_obj:Object ) {
- stage_obj=_obj;
- }
- public function go():void {
- switch (stage_obj['displayState']) {
- case "normal" :
- stage_obj['displayState']="fullScreen";
- break;
- case "fullScreen" :
- stage_obj['displayState']="normal";
- break;
- }
- }
- }
- }
package {
import flash.display.Stage;
public class test {
public function test() {
}
public function dis(t:Stage){
trace("舞台宽度为:"+t.stageWidth)
}
}
}
import test;
var t:Sprite=new Sprite()
addChild(t)
var te:test=new test()
te.dis(stage)