AS3 - gotoAndStop с немедленным действием - PullRequest
5 голосов
/ 25 февраля 2011

Я перехожу с AS2 на AS3 и, вероятно, столько же людей до того, как обнаружили эту несовместимость:

Я довольно часто использовал код вроде:

gotoAndStop(5);
trace(box); //where box is a movie on 5th frame

Какой самый простой способ сделать это в AS3.

Ответы [ 2 ]

7 голосов
/ 26 февраля 2011

Существует простой способ решить эту проблему, но он не документирован:

addFrameScript(1, update);
gotoAndStop(2);

function update() {
    trace(box); // outputs [object MovieClip]
}

Обратите внимание, что первый аргумент для addFrameScript - это номер кадра, но он основан на 0, т. Е. 0 - это кадр 1, 1 - это кадр 2 и т. Д. ... Второй аргумент - это функция, которую вы хотите вызвать.

5 голосов
/ 25 февраля 2011

нет простого способа сделать это.

что вам нужно сделать, это

  • настройка прослушивателя, когда кадр воспроизводится

  • скажи ему перейти к указанному кадру (5)

  • заставить рендеринг произойти как можно скорее stage.invalidate

.

Одна из главных причин остаться с as2. Не сказать as2 лучше, просто лучше в нескольких вещах, и это одна из них. Мое мнение таково, что as3 на самом деле не очень хорошо справлялся со сроками.

с as2 вы делаете

gotoAndStop(5);
trace(box);

С as3 вам нужно подождать, пока график будет отображаться.

stage.addEventListener(Event.RENDER, onRenderStage);
protected function onRenderStage(ev:Event):void {
    trace(this['box']);
}
gotoAndStop(5);
stage.invalidate();

Раньше в as2 дня у меня были разные активы в разных кадрах одного MovieMlip, но сделать это в AS3 слишком сложно, чтобы пользоваться какими-либо из этих преимуществ. Поэтому, пока это будет работать, я бы рекомендовал рассмотреть другое решение в целом. Или придерживайтесь as2.

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