As3 goto и остановка нескольких вызовов в одном кадре - PullRequest
1 голос
/ 17 марта 2011

Я пытаюсь создать спрайт-листы для поворота объектов DisplayObject, и кажется, что вызовы gotoAndStop () не работают.

Вот пример того, что происходит:

function createRotationalSpriteSheet ( displayObject : DisplayObject )
{
    findMaxTileDimensions( displayObject );
    MovieClip( displayObject ).gotoAndStop( 1 ); // this call does not work.
}

function findMaxTileDimensions ( displayObject : DisplayObject )
{
    MovieClip( displayObject ).gotoAndStop( 1 ); // this call works fine
}

Для вызова gotoAndStop, который не работает, метка и номер кадра обновляются, но когда я пытаюсь нарисовать DisplayObject с помощью BitmapData.draw, кадр все еще застрял в последнем кадре, к которому было сказано перейти в функции findMaxTileDimensions.

Это происходит потому, что я вызываю функцию gotoAndStop много раз в одном кадре ввода?Это происходит потому, что я вызываю gotoAndStop из двух разных функций в одном и том же фрейме ввода?

Ответы [ 4 ]

2 голосов
/ 17 марта 2011

Кажется, здесь происходит несколько вещей. Вы используете gotoAndStop (), но это не будет обновлять изображения до тех пор, пока после не произойдет все остальное. From docs - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/MovieClip.html#gotoAndStop() - "Приносит точку воспроизведения к указанному кадру фрагмента ролика и останавливает его там. Это происходит после завершения всех остальных действий в кадре." Так что если если вы хотите, чтобы это работало, то вам нужно сделать это в нескольких кадрах.

Во-вторых, вы упомянули, что это сортировка вращения объектов DisplayObject для их отображения в виде BitmapData - есть ли анимация в MovieClip? Или анимация вращающегося мувиклипа. Если это последнее, тогда установка поворота через код и рисование разных углов будет работать так, как вы пытаетесь это сделать (то есть все в одном кадре)

Также проверьте SWFSheet по битам 101: http://www.bit -101.com / blog /? S = swfsheet . Это сделано, чтобы взять анимацию и экспортировать PNG-спрайты для нее. Там может быть код, я не уверен. В любом случае вы можете сохранить аним, а затем вставить / загрузить его в

1 голос
/ 15 декабря 2012

Похоже, это может быть известной ошибкой в ​​AIR (при условии, что это происходит только в AIR): https://bugbase.adobe.com/index.cfm?event=bug&id=3340012

В отчете об ошибке упоминается хаккастический обходной путь, который, как я только что проверил, действительно работает: добавьте свой MovieClip на сцену, прежде чем пробежаться по нему. Вы можете удалить его, когда закончите.

Кроме того, вы можете создать экземпляр MovieClip дважды (один раз, чтобы получить размеры, затем один раз, чтобы создать BitmapDatas), или добавить пустой фиктивный кадр в начале вашего MovieClip и проигнорировать этот первый кадр.

0 голосов
/ 17 марта 2011

Как лучший вариант использования, я думаю, что было бы лучше использовать растровое изображение, а затем кэшировать его в некоторой структуре данных: прочитайте это: http://www.8bitrocket.com/2010/3/3/Tutorial-AS3-How-to-Blit-an-animation-from-a-tile-sheet-embedded-at-compile-time/Кроме того, возможно, я не на 100% ясен по этому вопросу, но зачем вам использовать enterframe для создания спрайт-листа?

Вы можете просто повернуть растровое изображение, затем захватить его как bitmapData, или просто использовать преобразование матрицы для данных растрового изображения http://www.8bitrocket.com/2010/05/01/tutorial-exploring-the-as3-bitmap-class-lesson-3-scale-from-the-center-with-a-matrix/

0 голосов
/ 17 марта 2011

Здесь происходят две вещи.Основная проблема заключается в том, что gotoAndStop основан на 1, а не на 0.gotoAndStop (0) не будет выдавать ошибку, потому что ожидает объект (поэтому он может принимать метку или номер кадра).

gotoAndStop основывается на 1 по устаревшим причинам - то есть привязан к старому способу работы в flash IDE.

Если изменение этого параметра на систему, основанную на 1, все еще не работает, вам необходимо добавить addframescript (который основан на 0), см. Мой ответ здесь

AS3 - gotoAndStopс немедленным действием

...