Этап Event.ENTER_FRAME против CREATION_COMPLETE - PullRequest
0 голосов
/ 18 декабря 2009

У меня есть проект AS3, который я создаю во FlexBuilder.

В конструкторе моего основного класса у меня есть это:

    stage.addEventListener(Event.ENTER_FRAME, stage_enterFrameHandler);

А затем функция обработчика событий:

    private var tempCounter:uint = 0;

    private function stage_enterFrameHandler(event:Event):void
    {
        stage.removeEventListener(Event.ENTER_FRAME, stage_enterFrameHandler);
        tempCounter += 1;
        trace(tempCounter);
    }

Когда я работаю в режиме отладки, tempCounter записывает один раз, как 1. Почему это? Я думаю, что весь смысл Event.ENTER_FRAME в том, что он продолжает стрелять.

Документация гласит:

Если точка воспроизведения не движется или если имеется только один кадр, это событие отправляется непрерывно в зависимости от частоты кадров. Это событие отправляется одновременно всем экранным объектам, прослушивающим это событие.

Так почему бы мне не увидеть, чтобы счетчик увеличивался примерно в 30 раз в секунду (для этого у меня установлена ​​частота кадров)?

РЕДАКТИРОВАТЬ ПРИМЕЧАНИЕ:

Хорошо, ну, я понял это. Это потому, что я немедленно удаляю список событий. Событие ENTER_FRAME продолжает срабатывать ... Единственная причина, по которой код выполняется таким образом (код, который я унаследовал), заключается в том, что, как я полагаю, CREATION_COMPLETE недоступен, если вы не используете фреймворк flex.

1 Ответ

1 голос
/ 18 декабря 2009

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

удалить строку

stage.removeEventListener(Event.ENTER_FRAME, stage_enterFrameHandler);
...