addEventListener в вложении SWF - PullRequest
1 голос
/ 30 апреля 2011

В настоящее время у меня есть файл .swf, который вложен в другой файл .swf.

В родительском SWF-файле я использую UILoader для загрузки другого .swf-файла.

uiLoader.source = "data / child.swf";

-

В дочернем SWF-файле у меня есть

stage.addEventListener (KeyboardEvent.KEY_DOWN, keyPressedDown);

и когда я запускаю его самостоятельно, он отлично работает;но когда я запускаю child.swf через parent.swf stage.addEvent ... выдает исключение нулевой ссылки.

Является ли этап частью причины проблемы? и если да, есть ли способэто исправить?

Ответы [ 2 ]

2 голосов
/ 30 апреля 2011

Хорошо, это хороший вопрос, мне потребовалось немного времени, чтобы разобраться в этом.

В основном Flash выполняет эту странную вещь (возможно, ошибку?), Но запускает функции перед фактической инициализацией объектов.Это происходит с инициализацией мувиклипов только на сцене:

var mc: кое-что = новое что-то ();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); выполняетсяпосле инициализации ваших объектов.

0 голосов
/ 30 апреля 2011

Я не совсем уверен, но может быть так, потому что MovieClip со слушателем событий вложен в другой MovieClip, у него нет доступа к объекту stage.

Одна вещь, которую нужно попробовать, это удалить eventListener со сцены, так что это просто выглядит так:

addEventListener(KeyboardEvent.KEY_DOWN,keyPressedDown);

Это может сработать. Кроме того, вы можете просто сохранить код события в родительском MovieClip. Надеюсь, что это может помочь.

Debu

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...