Изометрия, имеется множество тайлов, необходимо ускорить процесс их рендеринга.
1. Пробовал добавлять все тайлы родительскому объекту, т.к. сам Flash никак не реализует отсечение FPS весьма низкий и приходится вручную добавлять и удалять тайлы (addChild/removeChild). Да и жрёт памяти этот метод немеряно только на создание экземпляров Bitmap для тайлов (BitmapData общая)
2. Пробовал рендерить все тайлы в BitmapData размером с экран. Памяти потребляет значительно меньше предыдущего метода, но люто бешено тормозит.
Очевидно что в первом случае рендеринг производится какими-то внутренними и относительно шустрыми методами. Существуют ли какие-либо методы оптимизации такой специфической задачи? Также очень интересует за счёт чего ускоряется рендеринг в Alternativa3D )
upd: copyPixels спасает
по вопросу отсечения не помогу, поскольку Flash не знаю, но может на мысли натолкну. Последнее время много трубили, что flash стал поддерживать аппаратное ускорение для вывода графики. Если это так, то отрисовка десятка тысяч тайлов не должна давать существенного падения производительности.
В альтернативе кулинг реализован и разбиение пространства. Не уверен, не помню точно, но вроде BSP.
Флеш будет тормозить при перерисовке большой области экрана, потому как рендер софтварный. То есть если карта прокручивается - тормозов избежать сложно. Спасает дело cacheAsBitmap спрайта, делает оно примерно то же, что и было реализовано в 2. Только карта должна быть вся привязана к одному спрайту и кроме нее в потомках у спрайта ничего быть не должно. Если карта больше экрана, бейте ее на большие квадраты (например, 20х20 тайлов), отсекайте их динамически через свойство visible. Потому как cacheAsBitmap не работает на спрайтах шире/выше чем, вроде бы, 2200 пкс.
Опять же, если будут проблемы с памятью, придется делать квадраты не спрайтами, а битмапами и рендерить в них тайлы вручную при загрузке карты.
XProger
>2. Пробовал рендерить все тайлы в BitmapData размером с экран. Памяти потребляет значительно меньше предыдущего метода, но люто бешено тормозит.
методом draw() что-ли?
попробуйте copyPixels()
аля так, псевдо код:
var canvas:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false); addChild(canvas); ... main loop: canvas.lock(); for (var i:int=0;i<tilesQuantity;i++) canvas.copyPixels(tile[i], tile[i].rect, destPoint); //tile[i] is BitmapData canvas.unlock()
XProger
Кэш в битмап , Отсечение. Глупо удалять и добавлять объекты. Ты же в обычной игре не используешь список объектов для тайлов? Просто рисуем тайлы в битмап как было написанно раньше Ps-spectre. ФПС падает из за частого добавления и удаления объектов. Объекты в принципе нужны для часто анимируемых объектов
и еще может быть для интерфейса( Если нужен только вектор, а если используешь растр для интерфейса то нафиг объекты)
evirus
Бетка с поддержкой GPU выйдет весной, а публичная версия на начало 2012 г намечена, увы )
The.web
cacheAsBitmap пробовал, но от перерасхода памяти оно не спасает :\
Ps-spectre, Ignis,
copyPixels значительно разгрузило рендер, пасиб! )
XProger
Весной выйдет 3Д вроде? А так Флэш уже давно умеет ускорять графику на GPU но только вектор по идее. Таким образом Alternativa 3D и вывыодит все - за счет векторной графики.
Ignis
Текущий флеш ускоряет только видео и ничего кроме видео, текущая Alternativa3D 7 также ничего через GPU не ускоряет, а та что была показана на Adobe MAX 2010 является демонстрацией будущего Flash Molehill API который простым смертным девелоперам в руки не дадут до весны )
XProger
А че ето Bitmap жрет память, раз BitmapData общяя? Сколько у тебя тайлов там на екране?
Z
На экране мало, а вцелом весьма внушительные цифры накапливаются )
XProger
Ну вот, я про екран и говорю.
А что за изометрия - есть там статика, за которую может зайти динамика и что делаеш в етом случае?
Z
Если более конкретно, Симс первый видел? Вот то же самое, до 3д моделей и динамики пока не добрался.
XProger
зайди в свойства публикации любого Flash начиная вроде с CS3 и там будут пункты ускорения графики. Их три : Нет ускорения, прямое, ГПУ
Ignis
И чо? )
XProger
И профит же Х) Даже в контекстном меню в пункте "Параметры" есть пункт ускорения графики)
Тема в архиве.