AS3: Можно ли сгенерировать анимированные листы спрайтов из вектора во время выполнения?

Я хотел бы использовать растровые изображения в своих играх на ActionScript.

Для меня это представляет собой большое изменение в моем рабочем процессе, поскольку я всегда использовал вектор, но растровые изображения действительно намного быстрее обрабатываются в определенных обстоятельствах. Насколько я понимаю, 90% всех моих игровых ресурсов могут быть растровыми.

Во-первых, есть ли хорошие инструменты для работы с вектором на BitmapData? Библиотеки или утилиты с открытым исходным кодом?

Я знаю, что вы можете просто нарисовать BitmapData, и я это делаю, но как насчет анимации? А как насчет видеоролика о смеющейся корове? Как я могу визуализировать этот MovieClip во время выполнения в какую-то версию Bitmap?

Но более сложный, чем это ... А как насчет ситуаций, когда у вас нет MovieClip в необработанном виде?

Представьте себе 10000 винтиков, вращающихся с той же скоростью, что и код. Это тяжелая работа для процессора, поэтому отрисовка его в Bitmap в течение 1 оборота заменила бы 10000 зубцов на SpriteSheet. Я мог бы уничтожить винтики и сохранить SpriteSheet.

Может ли кто-нибудь предложить мне какие-либо ресурсы или ключевые слова Google, которые я могу найти, не уверенный в технике, но, кажется, имеет смысл? Особенно со Starling ... Мои векторы в какой-то момент должны будут стать SpriteSheets.

Спасибо.


person user1059939    schedule 08.02.2012    source источник


Ответы (2)


Основной процесс преобразования фрагмента ролика в лист спрайтов заключается в следующем:

  1. Выберите видеоклип.
  2. Получите границы фрагмента ролика. Вам нужно получить ширину и высоту самого широкого и самого высокого кадра анимации.
  3. получить количество кадров фрагмента ролика.
  4. Создайте новый объект bitmapdata шириной, равной количеству кадров, умноженному на ширину кадра. И высотой в один кадр. 5 прокрутите каждый кадр клипа и вызовите bitmapData.draw () для каждого кадра. Обязательно смещайте матрицу команды рисования в каждом кадре на ширину одного кадра спрайта.

Конечным результатом будет один объект bitmapdata с визуализацией каждого кадра.

Оттуда вы можете следовать этому руководству по копированию. http://www.8bitrocket.com/2008/07/02/tutorial-as3-the-basics-of-tile-sheet-animation-or-blitting/

person Plastic Sturgeon    schedule 08.02.2012
comment
Спасибо за ответ! То, что вы говорите, имеет смысл, и я попробую сегодня вечером. - person user1059939; 09.02.2012

Преобразование таблиц спрайтов в растровые изображения во время выполнения - не совсем тривиальная задача, и вам, возможно, будет лучше создать свои таблицы спрайтов перед компиляцией и использовать фреймворк с механизмом копирования, такой как Flixel или Flashpunk (я не очень знаком со Starling, но я полагаю, это тоже сработает). Есть пара достойных конвертеров MovieClip / SWF в png:

Однако, если вы намерены создавать таблицы спрайтов во время выполнения, вы, вероятно, можете перепрофилировать часть кода от Zoe ( это открытый исходный код). Взгляните на CaptureSWF класс, особенно capture() и handleVariableCaptureFrames(). Эти методы являются основой преобразования отдельных кадров MC в BitmapData, которые затем можно использовать для создания таблиц спрайтов.

person eterps    schedule 08.02.2012
comment
Я действительно использовал Zoe для JS-эксперимента ... Я забыл, что это был открытый исходный код. Я тоже займусь этим. Одна из проблем с предварительно скомпилированными таблицами спрайтов заключается в том, что если вы загружаете, скажем, 100 элементов ... Существует огромная разница в размере между MovieClip (SWF) и версией SpriteSheet. Сложив его, вы можете увидеть более 800% файлов. Я действительно хочу этого избежать. - person user1059939; 09.02.2012