Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.06.2012, 13:40
Rembrant вне форума Посмотреть профиль Отправить личное сообщение для Rembrant Найти все сообщения от Rembrant
  № 1  
Ответить с цитированием
Rembrant
 
Аватар для Rembrant

блогер
Регистрация: Sep 2010
Сообщений: 82
Записей в блоге: 2
По умолчанию Тряска экрана

Добрый день. Занимаюсь созданием в приложении эффекта тряски экрана (от взрыва). Если ставить сдвиг координат "поля боя" просто по таймеру или энтерфрейму, на слабых компах приложение подтормаживает из-за величины этого самого поля боя.
Хотелось бы услышать мнение спецов, как лучше реализовать такой эффект с точки зрения именно производительности.

Старый 25.06.2012, 13:46
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 2  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
1. Трясти битмапу со снимком чуть больше видимой облсти, например, совсем не напряжно.
Снимок можно обновлять, если важна анимация.
2. Или битмапу держать на месте, а "трясти" -- вырезая кусок с разными сдвигами и поворотами с помощью матрицы, передаваемой в Bitmapdata:draw
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.


Последний раз редактировалось ChuwY; 25.06.2012 в 13:51.
Старый 25.06.2012, 14:27
Rembrant вне форума Посмотреть профиль Отправить личное сообщение для Rembrant Найти все сообщения от Rembrant
  № 3  
Ответить с цитированием
Rembrant
 
Аватар для Rembrant

блогер
Регистрация: Sep 2010
Сообщений: 82
Записей в блоге: 2
Странно, почему-то битмапа даёт такой же результат. При том, что отрисовываю её только раз.

Старый 25.06.2012, 14:40
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 4  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Покажите код отрисовки и тряски, коли не слишком секретен.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 25.06.2012, 14:44
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Скрывайте всё, кроме битмапы при тряске.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 25.06.2012, 14:50
Rembrant вне форума Посмотреть профиль Отправить личное сообщение для Rembrant Найти все сообщения от Rembrant
  № 6  
Ответить с цитированием
Rembrant
 
Аватар для Rembrant

блогер
Регистрация: Sep 2010
Сообщений: 82
Записей в блоге: 2
отрисовываю и ставлю таймер:
Код AS3:
	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();
	}
и двигаю по таймеру:
Код AS1/AS2:
	private static function timerHandler(event:TimerEvent):void
	{
		if (_timer.currentCount == _count)
		{
			_view.parent.removeChild(_bitmap);
			_view.visible = true;
			return;
		}
 
		if (_timer.currentCount % 2 != 0)
			_bitmap.y -= 20;
		else
			_bitmap.y += 20;
	}
вот и всё.

Старый 25.06.2012, 15:43
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 7  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Странно. Это должны быть НУ УЖ ОЧЕНЬ слабые машины, чтобы затормозить от такой операции.
Может, вызываете doShake чаще, чем кажется или где-то еще утекает?
Очень быстрый способ это BitmapData:copyPixels.
Для такой простоя тряски подойдет.
Сохраняете исходную битмапку и на каждом кадре строгаете новую.
Ну или можно отрисовать две и менять их у битмапы.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 25.06.2012, 15:52
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 8  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
А если битмапу не добавлять, тормоза уйдут?
И у вас оно трясётся тольько 4 раза - это довольно мало. А отрисовка в битмапу и удаление/добавление старого - вообще-то ёмкая операция. Попробуйте тряхнуть раз 100. Если будет трястись энергичнее - видно для 4-й трясок способ плохой %)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 25.06.2012, 16:21
Rembrant вне форума Посмотреть профиль Отправить личное сообщение для Rembrant Найти все сообщения от Rembrant
  № 9  
Ответить с цитированием
Rembrant
 
Аватар для Rembrant

блогер
Регистрация: Sep 2010
Сообщений: 82
Записей в блоге: 2
ChuwY, машина не слабая, но есть возможность разворачивать приложение на весь экран. Вот тогда на мониторе 1600*900 особенно заметно. И даже если я оставляю 4 встряски, за это время происходит анимация, то есть мне нужно перерисовывать битмапу каждый раз, и copyPixels не прокатят.

-De-, да, тогда тормоза уйду. Если трясти 100 раз, эффект тот же, или даже чуть лучше.

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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