![]() |
|
||||||||||
|
|
|
|||||
|
Добрый день. Занимаюсь созданием в приложении эффекта тряски экрана (от взрыва). Если ставить сдвиг координат "поля боя" просто по таймеру или энтерфрейму, на слабых компах приложение подтормаживает из-за величины этого самого поля боя.
Хотелось бы услышать мнение спецов, как лучше реализовать такой эффект с точки зрения именно производительности. |
|
|||||
|
1. Трясти битмапу со снимком чуть больше видимой облсти, например, совсем не напряжно.
Снимок можно обновлять, если важна анимация. 2. Или битмапу держать на месте, а "трясти" -- вырезая кусок с разными сдвигами и поворотами с помощью матрицы, передаваемой в Bitmapdata:draw
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. Последний раз редактировалось ChuwY; 25.06.2012 в 13:51. |
|
|||||
|
Покажите код отрисовки и тряски, коли не слишком секретен.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
|
отрисовываю и ставлю таймер:
private static var _count:uint = 4; private static var _view:DisplayObjectContainer; private static var _bitmapData:BitmapData; private static var _bitmap:Bitmap; private static var _timer:Timer; public static function doShake(view:DisplayObjectContainer):void { _view = view; _bitmapData = new BitmapData(stageWidth, stageHeight, true, 0xFFFFFF); _bitmapData.draw(_view); _bitmap = new Bitmap(_bitmapData); _view.parent.addChild(_bitmap); _view.visible = false; _timer = new Timer(50, _count); _timer.addEventListener(TimerEvent.TIMER, timerHandler, false, 0, true); _timer.start(); } вот и всё. |
|
|||||
|
Странно. Это должны быть НУ УЖ ОЧЕНЬ слабые машины, чтобы затормозить от такой операции.
Может, вызываете doShake чаще, чем кажется или где-то еще утекает? Очень быстрый способ это BitmapData:copyPixels. Для такой простоя тряски подойдет. Сохраняете исходную битмапку и на каждом кадре строгаете новую. Ну или можно отрисовать две и менять их у битмапы.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
А если битмапу не добавлять, тормоза уйдут?
И у вас оно трясётся тольько 4 раза - это довольно мало. А отрисовка в битмапу и удаление/добавление старого - вообще-то ёмкая операция. Попробуйте тряхнуть раз 100. Если будет трястись энергичнее - видно для 4-й трясок способ плохой %)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
ChuwY, машина не слабая, но есть возможность разворачивать приложение на весь экран. Вот тогда на мониторе 1600*900 особенно заметно. И даже если я оставляю 4 встряски, за это время происходит анимация, то есть мне нужно перерисовывать битмапу каждый раз, и copyPixels не прокатят.
-De-, да, тогда тормоза уйду. Если трясти 100 раз, эффект тот же, или даже чуть лучше. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|