Невозможно создать объект с помощью Actionscript - PullRequest
0 голосов
/ 30 сентября 2011

Я создал MovieClip, «Экспортировал его для ActionScript» с тем же именем. Это нормально, когда я создаю объект визуально, перетаскивая его на сцену, но при использовании var smth:* = new myClass() возникает ошибка. Произошла ошибка, потому что у меня есть код в экспортированном MovieClip, и он включает в себя этап. Бывает так, что этап не создается в момент запуска кода? Я имею в виду, я создаю объект на втором кадре, так что это вроде как невозможно. Когда (в мувиклипе) я пишу trace(stage); вывод равен null. Как я уже сказал, при создании объекта визуально проблем не возникает. Дамы и господа, что за ...?!

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Если я следую тому, что вы говорите, у вас нет ссылки на stage прямо в вашем подклассе MovieClip? Это происходит, если MovieClip не присоединен к сцене или другому DisplayObjectContainer, который уже подключен к нему (где-то в цепочке списка отображения).

Один из способов проверить, доступен ли этап и выполнить ваш код, когда он доступен, - это небольшой фрагмент кода, часто встречающийся в проектах FlashDevelop:

public function Main():void {
    stage ? init() : addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void {
    removeEventListener(Event.ADDED_TO_STAGE, init);
    // entry point
}

Таким образом, если stage IS найден, он немедленно запускает метод init() (без аргументов), в противном случае он будет ожидать его добавления на сцену (или какого-либо другого объекта DisplayObjectContainer, который уже подключен), который будет передать параметр Event, когда он использует init(e:Event) в качестве метода обратного вызова.

1 голос
/ 30 сентября 2011
import flash.events.Event;

В конструкторе класса добавьте eventListener для добавляемого этапа.

this.addEventListener(Event.ADDED_TO_STAGE, myFunction);

, затем просто создайте EventListener с именем init и с событием в качестве параметра.

function myFunction(e : Event) : void
{
    this.removeEventListener(Event.ADDED_TO_STAGE, myFunction);

    // execute code here
}

Требуется removeEventListener, не забудьте удалить его!Ошибка во флэш-памяти вызовет событие, добавленное на сцену дважды, поэтому, если вы не хотите выполнять код дважды, вы должны удалить его.

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