2011-02-25 5 views
5

Я переезжаю из AS2 в AS3 и, вероятно, как много ППЛ, прежде чем нашел эту несовместимость:AS3 - gotoAndStop с немедленным действием

я использовал довольно часто подобный код:

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

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

ответ

5

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

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

  • установки слушателем, когда рама делает

  • сказать ему, чтобы перейти к указанной раме (5)

  • сила рендеринга в произошли КАК МОЖНО СКОРЕЕ stage.invalidate

.

Одна из главных причин остаться с 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(); 

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

+0

AS3 должен быть уверен, что он не потеряет контекст для остальных на действиях на исходном фрейме, поэтому он делает движение в конце всего ... это цена для компиляции JIT, я думаю. – Oldes

7

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

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

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

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

Смежные вопросы