Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Частичная перерисовка bitmapData (http://www.flasher.ru/forum/showthread.php?t=198813)

relevance4 07.05.2013 00:37

Частичная перерисовка bitmapData
 
Привет!
Есть 10000 мувиков, часть из них статичны, остальные перемещаются. те, которые перемещаются с незаметной глазу скоростью назовём спящими.
мувики - картинки 6х6 пикселей. размер видимой части 800х600 и все мувики находятся в ней.

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

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

Wolsh 07.05.2013 01:29

1. зачем вообще "мувики", если они — "картинки" и на выходе — битмап?
2. да строго говоря, никак не вырезать. Под ним же может быть другой мувик отрисован, то есть вырезаемый будет не полностью на прозрачном фоне. Так что статичные сразу отрисовываем на битмапдату и храним ее, а всех беспокойных каждый шаг отрисовываем либо на новую прозрачную поверх фона, либо на новую копию фона.

relevance4 07.05.2013 13:01

1. ну ведь наверняка показывать один битмап дешевле, чем десять тысяч.
2. тем мувиком, который "под ним" можно пренебречь, а можно перерисовать - на данном этапе это не важно. важнее разобраться, как картинку каждый раз перерисовывать без вызовов new bitmap, new bitmapdata, и похоже, без draw.
просто соль в том, что все 10000 мувиков интегрируются по Верле и проц уже достаточно загружен а с помощью "умного рендера" хочется разгрузить его в отношении графики.

Wolsh 07.05.2013 14:35

Цитата:

как картинку каждый раз перерисовывать без вызовов new bitmap, new bitmapdata, и похоже, без draw
Я вроде ответил в первом пункте. Зачем нужны мувики, если нужны картинки? Странный же вопрос, правда? Зачем Вам тяжелый отображаемый класс, который Вы не собираетесь отображать? Оперируйте битмапдатами "картинок" и все. Используйте быстрый copyPixels() из этих битмапдат в отображаемую. И не надо никаких 10000 создавать каждый раз или отрисовывать мувиклипы методом draw(). У Вас уже есть все битмапдаты, зачем их каждый раз перерисовывать?

Котяра 07.05.2013 16:01

Тем более, что, наверняка, типов "мувиков" гораздо меньше чем 10000, а то и вовсе 1.

relevance4 07.05.2013 18:30

13300 мувиков.
copyPixels отлично справился

Добавлено через 45 часов 54 минуты
вот результат http://www.flasher.ru/forum/showthread.php?t=198927


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

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