Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Производительность на примере игрового персонажа (http://www.flasher.ru/forum/showthread.php?t=147917)

bebop 17.12.2010 10:07

Производительность на примере игрового персонажа
 
Как сейчас у меня реализовано:

Есть игровой персонаж. У него есть разные состояния - идет, стоит, бьет и т.п. Персонаж представляет из себя мувиклип внутри которого находятся мувиклипы разных состояний и чтобы сменить одно состояние на другое достаточно все мувиклипы кроме нужного сделать невидимым.

Стоит отметить что при инициализации персонаж нужно раскрасить и одеть, т.е. пробежаться по всем мувиклипам состояния и сделать следующие действия:
1) Раскрасить (наложение (ColorMatrixFilter) на разные части тела)
2) Одеть (вставить в разные части тела спрайты одежды).

Вопрос - как сделать иначе, чтобы меньше тормозило при отображении? Имеет ли смысл объединить все состояния в одно и бегать по frameLabel'ам?

bebop 20.12.2010 14:04

Поднимаю тему.

cleptoman 20.12.2010 14:14

поднимать темы не стоит...

по сабжу - бегать по фреймам - не айс, по-моему. поскольку заходя каждый раз в фрэйм вам по новой его нужно красить и проводить остальные манипуляции

gloomyBrain 20.12.2010 14:20

Нарисуйте части тела (дефолтные)
Сложите их в один мувик со всеми анимациями (бить-стрелять и тд)
Добавьте этот мувик на сцену
Через getChildByName или еще как-то очистите (removeChildAt) текущее содержимое частей тела и поставьте на их место заранее отрисованые в bitmap скины для частей тела.

То есть первоначально отрисованный персонаж будет просто анимированным набором контейнеров, в которые мы затем добавляем нужные нам скины

Gaen 20.12.2010 14:25

1. Делать части невидимыми лучше при помощи removeChild, нежели visible=false и боже упаси alpha=0.
2. Имеет смысл включить битмап-кэширование для кусков персонажа, чтобы флэш не вычислял ColorTransform при отрисовке каждого кадра.
3. Более жестокое кэширование: одеваем-красим, затем пробегаемся по всем анимациям состояний, на каждом кадре срисовываем персонажа в битмап, затем вместо мувиков с анимацией используем мувик, который показывает полученную последовательность.

Nemez 20.12.2010 15:50

Битмап работает быстрее, чем векторная графика?

Gaen 20.12.2010 16:04

Что по-вашему быстрее: отрисовать пачку пикселей, или по формулам кривых просчитать каждую замкнутую область, проверить на пересечение, рассчитать цвета и градиенты, наложить на это цветовую трансформацию, учесть поворот и искажение родительских контейнеров, чтобы вычислить в итоге ту же пачку пикселей, и только потом её отрисовать? :)

surlac 21.12.2010 00:14

Цитата:

Сообщение от Nemez (Сообщение 958689)
Битмап работает быстрее, чем векторная графика?

Тут даже сам адоб рекомендует вместо постоянной перерисовки векторов использовать битмап.

Цитата:

Путем непосредственной манипуляции объектом BitmapData можно создавать сложные изображения без необходимости постоянно перерисовывать содержимое из векторных данных в каждом кадре

Nemez 21.12.2010 00:19

Да, логично. Время загрузки только растет.

gloomyBrain 21.12.2010 00:26

Цитата:

Время загрузки только растет
Можно загрузить векторную графику и потом отрисовать ее в битмап. Время загрузки останется небольшим, а скорость работы приложения вырастет ощутимо.


Часовой пояс GMT +4, время: 15:23.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.