Loader在as3中返回一个null对象

时间:2015-09-24 09:09:11

标签: actionscript-3

我想在点击swf时创建一个调用另一个button文件的菜单。 但是,返回的消息是 -

  

TypeError:错误#1009:无法访问空对象引用的属性或方法。在GameController()

上面给出的GameController()是被叫"HotAirRises.swf"

的文档类

代码如下:

package  {

import flash.display.MovieClip;
import fl.controls.Button;
import flash.events.MouseEvent;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;

public class MainController extends MovieClip {


    public function MainController() 
    {
        tester.addEventListener(MouseEvent.CLICK, testIt);
        // constructor code
    }
    private function testIt(e:MouseEvent)
    {
        trace("testing");
        var myLoader:Loader = new Loader();                    
        var url:URLRequest = new URLRequest("HotAirRises.swf"); 
        trace(myLoader,url);
        myLoader.load(url,null);
        addChild(myLoader);
    }
}

}

我在这里缺少什么?与其他HotAirRises.swf文件有关? 请帮助!

1 个答案:

答案 0 :(得分:1)

我的猜测是GameController在HotAirRises.swf中访问stage属性(可能根据舞台维度定位显示对象)。 问题是swf正在加载,所以最初stage属性将为null。

您可以尝试在加载前立即添加加载程序:

var myLoader:Loader = addChild(new Loader()) as Loader; 

(加载后你不需要addChild(myLoader);),但这可能不起作用。

要100%确定您将获得预期的行为(并且作为最佳做法),请在ADDED_TO_STAGE事件处理程序上初始化您的GameController。

您的代码可能类似于:

GameController(){//constructor
   init();
}

private function init():void{
  //initalise Game Controller code
}

应该是这样的:

GameController(){//constructor
   addEventListener(Event.ADDED_TO_STAGE, init);
}
private void init():void{
//stage should not be null here, carry on initialising
}

同时查看this article