PDA

Просмотр полной версии : код управления спрайтами перевести в анимацию мувиклипов


neonoviiwolf
16.05.2015, 15:27
Добрый день.
Возник вопрос, для улучшения производительности.
Например, допустим я программирую что-то типо взрыва (разлёт объектов), т.е. создаю некоторое количество спрайтов и AS3 пишу их поведение. Так же в этом коде я меняю альфу и размеры объектов, соответственно в какой-то момент это ест довольно много ресурсов. Так вот, думаю несколько оптимизировать всё это и взять отдельно "взрыв", создать из него мувиклип, наделать с 10-ток вариантов и просто использовать как обычный мувик. Это позволит полностью избавиться от неплохого куска кода. Но вот и вопрос, рисовать в ручную - не вариант, хочется плавности в теже 60 кадров/секунду. Вот и вопрос, а есть ли возможность запустить анимацию и сделать из неё мувик?

undefined
16.05.2015, 17:46
записать анимацию каким-нибудь скринграбером и вставить в новый мувиклип.Но это не путь силы.

caseyryan
16.05.2015, 18:04
Это позволит полностью избавиться от неплохого куска кода
Избавление от куска кода - это не улучшение производительности. В самом мувике тоже будет много кода, который просто не виден. Главное сделать код максимально оптимизированным. При этом он не обязательно должен быть коротким.
Для этой цели лучше какой-нибудь движок частиц использовать. Если речь о простом флеше (а судя по всему это так), то можно попробовать FLINT (http://flintparticles.org/)

ZackMercury
16.05.2015, 18:55
neonoviiwolf, а в чём проблема? Создаёшь битмапдату с размерами
ширинаЖелаемогоСпрайта:высотаЖелаемогоСпрайта*кол-во кадров,
копируете в ряд снимки bitmapData.draw(), это ест ресурсы очень хорошо, поэтому лучше заранее это делать, вместе с загрузкой приложения.
затем создаёте класс, который будет наследовать битмапдату и хранить эту анимацию, и в нём каждый кадр с помощью метода copyPixels копируете кадры каждый в своё место, но только не забывайте очищать bitmapData перед копированием.

конечно, всё можно упростить до хранения массива битмапдат, но мне кажется, что первый вариант будет работать быстрей.

caseyryan
16.05.2015, 19:05
Да не надо этого делать. Ни copyPixels() ни draw(). Зачем что-то там копировать и очщать, когда можно просто поменять ссылку на саму битмапдату. У меня обычно спрайтовая анимация так и работает, есть кадр (Bitmap), у которого в нужный момент просто заменяется битмапдата. Работает шустро и нареканий нет

ZackMercury
16.05.2015, 19:09
caseyryan, простите, что? не надо draw? а как же тогда собирать анимацию в клип?

caseyryan
16.05.2015, 20:32
caseyryan, простите, что? не надо draw? а как же тогда собирать анимацию в клип?
Можно заранее собрать, в той же adobe flash pro, и загрузить кадры в готовом виде (я обычно так и делаю), но только кадры мне присылают)
Ну или да, разок использовать copyPixels на старте, чтобы поделить атлас на отдельные объекты bitmapData, которые потом и втыкать в кадр.
При первом подходе можно организовать асинхронную загрузку игры, с показом прогресса, и не будет подвисания при изначальной сборке анимации. Во втором, если много данных, будет временное подвисание. Но зато не нужно складывать множество картинок для отдельной загрузки

ZackMercury
16.05.2015, 21:43
caseyryan, у автора темы есть готовый код симуляции взрыва или чего-то там, он хочет просто сделать десяток анимированных спрайтов из этого кода.

neonoviiwolf
17.05.2015, 02:33
ZackMercuryда-да, верно. Анимация уже есть, рандомное количество частиц разлетается в рандомное направление, при этом изменяют свои размеры и альфу, таких штук может возникать и 5 в секунду, соответственно в игрушке каждый раз неплохое количество ресурсов ЦП ест, вот и пришла идея, просто накляпать с десяток мувиков, где всё это уже зарисовано, уверен, что показать с десяток рисунков для ЦП проще, чем просчитывать каждый раз всё по новому. НО всё должно быть видно, что мувик не перекрывает. Ну как в png и jpeg, если в png что-то не закрышивать, то спрайт в том месте будет прозрачным, а если перевести в jpeg и сделать спрайт, то будет белым.
Игрушку саму пишу в FD, вот и думаю в adobe professional CC сварганить мувик, выгрузить в библиотеку и готово. Ток вот и появился вопрос, как объяснить СС, что мне вот из этой анимации надо сделать мувик в 3 секунды (180 кадров)