我目前有一个.swf文件嵌套到另一个.swf文件中。
在父SWF文件中,我使用UILoader加载其他.swf文件。
uiLoader.source =“data / child.swf”;
-
在子SWF文件中我有
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyPressedDown);
当我自己运行它时,它完美地工作;但是当我通过parent.swf stage.addEvent运行child.swf时......给我一个空的引用异常。
舞台是导致问题的原因吗?如果是,有没有办法解决这个问题?
答案 0 :(得分:2)
好的,这是一个很好的问题,花了一点时间来弄明白。
基本上Flash会做这个奇怪的事情(也许是一个bug?)但是在实际初始化对象之前运行这些函数。只需在舞台上初始化动画片段就会发生这种情况:
var mc:something = new something(); 的addChild(东西)
现在在something.as如果你有一个初始化函数中的一个阶段的引用,它将给出null。 (参考:http://www.emanueleferonato.com/2009/12/03/understand-added_to_stage-event/)
所以基本上采取同样的问题并将其扩展到urlLoader,它在实际构建其层次结构阶段之前运行代码 - >电影剪辑
现在为了解决这个问题,请在你的孩子swf中做这样的事情:
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.display.MovieClip;
addEventListener(Event.ADDED_TO_STAGE, init);
function init(event:Event){
trace("test");
stage.addEventListener(KeyboardEvent.KEY_DOWN, moveBox);
var testMC:test = new test();
addChild(testMC);
}
function moveBox(event:KeyboardEvent){
trace("a");
testMC.x += 11;
}
以上是我的代码,您可以废弃其中的大部分内容,但需要注意的主要事项是: addEventListener(Event.ADDED_TO_STAGE,init); 初始化对象后执行。
答案 1 :(得分:0)
我不完全确定,但可能是因为带有事件监听器的MovieClip嵌套在另一个MovieClip中,它无法访问“stage”对象。
要尝试的一件事是从stage中删除eventListener,所以它看起来像这样:
addEventListener(KeyboardEvent.KEY_DOWN,keyPressedDown);
这可能有用。或者,您可以将事件代码保留在父MovieClip中。希望这些事情可能有所帮助。
得不