1

我目前有一个嵌套到另一个 .swf 文件中的 .swf 文件。

在父 SWF 文件中,我使用 UILoader 加载另一个 .swf 文件。

uiLoader.source = "数据/child.swf";

-

在我的子 SWF 文件中

stage.addEventListener(KeyboardEvent.KEY_DOWN,keyPressedDown);

当我自己运行它时,它可以完美运行;但是当我通过 parent.swf stage.addEvent 运行 child.swf 时...给我一个空引用异常。

阶段是导致问题的原因吗?如果是,有没有办法解决这个问题?

4

2 回答 2

2

好的,这是一个很好的问题,我花了一点时间才弄清楚。

基本上,Flash 做了这个奇怪的事情(可能是一个错误?),但在实际初始化对象之前运行这些函数。仅在舞台上初始化电影剪辑也会发生这种情况:

var mc:something = new something(); addChild(东西)

现在在某事中。好像你在初始化函数中有一个阶段的引用,它会给出空值。(参考: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); 在您的对象初始化后执行。

于 2011-04-30T07:53:03.247 回答
0

我不完全确定,但可能是因为带有事件侦听器的 MovieClip 嵌套在另一个 MovieClip 中,它无法访问“舞台”对象。

要尝试的一件事是从舞台上删除 eventListener,所以它看起来像这样:

addEventListener(KeyboardEvent.KEY_DOWN,keyPressedDown);

那可能行得通。或者,您可以只将事件代码保留在父 MovieClip 中。希望这些东西可能会有所帮助。

得不

于 2011-04-29T21:35:53.783 回答