我想在点击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
文件有关?
请帮助!
答案 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。