2011-03-19 94 views
0

所以我试图让外部预加载器加载我的主要瑞士法郎(loading.swf),有使用该代码的类文件名为mainLoading.as文件:与预加载的类文件AS3外部瑞士法郎

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); 
} 

所以我得到一个错误信息说:

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

我想我得到的错误消息,因为我在访问我的mainLoading()类文件的阶段。我想在我的类文件添加以下内容到构造,但没有奏效:

public function mainLoading() { 
    addEventListener(Event.ADDED_TO_STAGE, init); 
} 
private function init(e:Event): void { 
    initStartUpScene(); 

} 

我initStartUpScene功能只是抛出简介场景到loading.swf

有什么建议?

感谢您的帮助。

+0

你确定'mainLoading()'方法中唯一的代码只是对'addEventListener()'方法的调用,而没有其他的方法吗?如果不是,显示其余的缺少代码可能会使您更容易识别您的问题。 – Taurayi 2011-03-19 09:11:13

回答

0

(问题)是您的mainLoading是否延伸SpriteMovieclip

编辑

阅读您的评论后,我会建议尝试这样的:

添加一个函数调用的SWF内容里面你完全进行处理:

function done (e:Event):void{ 
    removeChild(loadingPage); 
    addChild(l); 
    Object(l.content).initMethod(); 
} 

content让你访问方法在你的加载.swf主类(例如mainLoading)

并替换mainLoad中的事件处理荷兰国际集团通过:

public function mainLoading() { 
    //no event handling in constructor 
} 

public function initMethod():void { 
    //here you go 
    init(); 
} 

public function init():void { ... //No more event here 

顺便说一句这不是解决你的问题最彻底的方法。

+0

@Taurayi - 是的,这是我在'mainLoading()'方法中的所有代码。在'initStartUpScene()'函数中,我添加一个影片剪辑到'this.addChild();'我有一个'stage.addEventListener()'键盘事件。我发现这个:http://www.ghostwire.com/blog/archives/as3-avoiding-null-object-reference-error-when-loading-module-swf/这应该是解决这个问题,但它仍然没有'为我工作。 @Nebu - mainLoading扩展Movieclip。这会改变什么吗?非常感谢你的帮助。 – 2011-03-19 18:52:33

0

如果这是确切的消息,那么是的,添加ADDED_TO_STAGE侦听器应该修复它。 记住重新编译“loading.swf”如果你做出任何更改(步我似乎总是忘了)

是否“loading.swf”在它自己的运行时,它没有任何错误,运行得很好(没有将它加载到“容器”SWF中)?

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”功能,如果你赢了”也不需要它。

0

OOOOOOKKKKK,所以承认失败,再尝试它,重写我的代码几乎一半,试图说服自己的一个星期左右即预加载器被高估了,我终于想通了(请打起鼓)后:

我有一个变量引用在我的构造函数方法被调用之前被调用的阶段。像这样:

private var xScrollPosRight:Number = stage.stageWidth - xScrollPosLeft;

我只是将stage.stageWidth更改为750,它工作。

生活和学习。

相关问题