AS3 Preloader Eventlistener奇怪

时间:2011-03-05 20:58:26

标签: flash actionscript-3 preloader addeventlistener

我有一个预加载器,可以像这样加载和附加一个swf:

stage.addChild(loadedSWF);

在loadedSWF中我有一个eventlistener:

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

当关注添加到显示列表的TextField时,onKeyDown停止响应

BUT

当没有预加载器打开loadedSWF时,onKeyDown工作,而焦点在TextField上

为什么会这样?如何控制?

这是预加载器:

l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop);
    l.contentLoaderInfo.addEventListener(Event.COMPLETE, done);
    l.load(new URLRequest("http://www.foo.com/foo.swf"));

    function loop(e:ProgressEvent):void
    {
        perc = Math.round(e.bytesLoaded / e.bytesTotal * 100);
        lt.text = String(perc);
        if (perc >= 100)
            l.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, loop);
    }

    function done(e:Event):void
    {
        l.contentLoaderInfo.removeEventListener(Event.COMPLETE, done);
        stage.addChild(l);
    }

2 个答案:

答案 0 :(得分:0)

将键盘事件的实例化放入onAddedToStage事件中。

addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

function onAddedToStage(evt:Event):void
{
    removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
}

这将阻止它在独立的swf中工作,但是当它加载到其加载器shell时它将起作用。

答案 1 :(得分:0)

这是一个事件安全问题,我不得不为此发布AS3手册,在冒泡和捕获阶段,事件具有安全限制。在我的情况下,属于预加载器的阶段对于加载的swf是不安全的。

要解决此问题,请将以下行添加到正在加载的swf

Security.addDomain("http://www.yourdomain.com");

我认为此行已经在预加载器中。

另外要检查一个swf是否可以访问它可以在Loader类中附加的父级,你可以使用

l.contentLoader.childAllowsParent