所以我正在尝试使用此代码创建一个外部预加载器来加载我的主.swf(loading.swf)文件,该文件有一个名为mainLoading.as的类文件:
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop);
l.contentLoaderInfo.addEventListener(Event.COMPLETE, done);
l.load(new URLRequest("loading.swf"));
var loadingPage:loading = new loading;
function loop (e:ProgressEvent):void{
addChild(loadingPage);
loadingPage.x = stage.stageWidth/2;
loadingPage.y = stage.stageHeight/2;
}
function done (e:Event):void{
removeChild(loadingPage);
addChild(l);
}
所以我收到一条错误消息:
TypeError:错误#1009:无法访问空对象引用的属性或方法。 在mainLoading()
我想我收到了错误消息,因为我正在访问mainLoading()类文件中的阶段。我尝试将其添加到我的类文件中的构造函数中,但它不起作用:
public function mainLoading () {
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event): void {
initStartUpScene ();
}
我的initStartUpScene函数只是将引导场景抛出到loading.swf
有什么建议吗?
感谢您的帮助。
答案 0 :(得分:0)
(问题)是mainLoading
延伸到Sprite
还是Movieclip
?
修改
阅读完评论后,我建议您尝试这样做:
在完整进度处理程序的swf内容中添加函数调用:
function done (e:Event):void{
removeChild(loadingPage);
addChild(l);
Object(l.content).initMethod();
}
content
允许您访问已加载的.swf主类中的方法(例如mainLoading)
并通过以下方式替换mainLoading中的事件处理:
public function mainLoading () {
//no event handling in constructor
}
public function initMethod():void {
//here you go
init();
}
public function init():void { ... //No more event here
顺便说一句,这不是解决问题的最简洁方法。
答案 1 :(得分:0)
如果这是你得到的确切消息,那么是的,添加ADDED_TO_STAGE监听器应该已修复它。 如果对其进行任何更改,请记得重新编译“loading.swf”(我似乎总是忘记这一步)
“loading.swf”在运行它时是否运行正常而没有任何错误(不将其加载到“容器”SWF中)?
答案 2 :(得分:0)
这可能与您提出的问题无关,但您可能会通过构建代码来获得更好的结果并避免一些错误:
var loadingPage:loading = new loading;
addChild(loadingPage);
loadingPage.x = stage.stageWidth/2;
loadingPage.y = stage.stageHeight/2;
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
l.load(new URLRequest("loading.swf"));
//I renamed this function since I believe "loop" is a reserved keyword.
function onProgress (e:ProgressEvent):void{
//No code needed
}
function onComplete (e:Event):void{
removeChild(loadingPage);
addChild(l);
}
如果你不需要它,你可以删除“onProgress”功能。
答案 3 :(得分:0)
在调用构造函数方法之前,我有一个引用正在调用的阶段的变量。像这样:
private var xScrollPosRight:Number = stage.stageWidth - xScrollPosLeft;
我刚刚将stage.stageWidth更改为750并且有效。
生活和学习。