AS3 Preloader Eventlistener Странность - PullRequest
0 голосов
/ 05 марта 2011

У меня есть предварительный загрузчик, который загружает и подключает SWF-файл следующим образом:

stage.addChild(loadedSWF);

В загруженном SWF у меня есть обработчик событий:

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

Когда TextField добавляется в список отображенияonKeyDown перестает отвечать

НО

Когда загруженный SWF открывается без предварительного загрузчика, 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 голосов
/ 10 марта 2011

Это была проблема безопасности событий, для этого мне пришлось вытащить руководство AS3, во время фаз пузыривания и захвата у событий есть ограничения безопасности.В моем случае этап, который принадлежит прелоадеру, не был безопасным для загруженного SWF.

Чтобы это исправить, добавьте следующую строку к загружаемому SWF-файлу

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

Я предполагаю, что эта строка уже находится в предварительном загрузчике.

Также, чтобы проверить, есть ли у SWF доступ к родительскому элементу, к которому он прикреплен в классе Loader, вы можете использовать

l.contentLoader.childAllowsParent

0 голосов
/ 06 марта 2011

поместит создание экземпляра вашего события клавиатуры в событие 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, но оно будет работать при загрузке в оболочку загрузчика.

...