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

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

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

Регистрация: Aug 2014
Сообщений: 6
По умолчанию Низкая производительность при большом количестве векторных фигур

В миоей флешке каждый новый кадр рисуются различные неправильные многоугольники с разными размерами, координатами, колличеством углов и т.д. в векторной графике. В начале следующего кадра все вышеописанные объекты стираются и рисуются новые многоугольники, не похожие на предыдущие, причем количество этих объектов непостоянно. При большом количестве фигур флешка начинает сильно тормозить. Как же повысить производительность флешки?
Видел способ, решающий проблему производительности для правильных фигур, которые не перерисовываются каждый кадр, но при применении этой технологии к моей программе - лагает еще сильнее...

Старый 13.06.2015, 20:55
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Скорее всего вам нужно делать растровый снимок, всех фигур. Как-то так:
Код AS3:
package
{
	import AS3.FPS;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author samana
	 */
	public class Main extends Sprite 
	{
		// растровая картинка с размерами вашей флешки
		private var _bmd:BitmapData = new BitmapData(600, 400, true, 0x00000000);
		// то, что отображает картинку, кладётся на сцену
		private var _bm:Bitmap = new Bitmap(_bmd);
 
		public function Main() 
		{
			//положили картинку на сцену
			addChild(_bm);
 
			addEventListener(Event.ENTER_FRAME, enterFrame);
		}
 
		private function enterFrame(e:Event):void 
		{
			// отчищаем картинку, заполняем её прозрачным цветом
			_bmd.fillRect(_bmd.rect, 0x00000000);
 
			// создаём временный контейнер, куда будем класть/рисовать фигуры
			var holder:Sprite = new Sprite();
 
			// здесь какая-то ваша реализация рисования фигур
			for (var i:int = 0; i < 200; i++) 
			{
				// если фигура это отдельный объект, то помещаете его во временный контейнер
				var figure:Figure = new Figure();
				figure.x = Math.random() * 600;
				figure.y = Math.random() * 400;
				holder.addChild(figure);
 
				//либо рисуете фигуры прямо во временном контейнере
				//holder.graphics.drawRect и т.д.
			}
 
			//после того как все фигуры созданы, то делаем растровый снимок контейнера
			_bmd.draw(holder);
 
		}
 
	}
 
}

Старый 14.06.2015, 18:43
MrFOX вне форума Посмотреть профиль Отправить личное сообщение для MrFOX Найти все сообщения от MrFOX
  № 3  
Ответить с цитированием
MrFOX

Регистрация: Aug 2014
Сообщений: 6
Спасибо вам за этот код. На компьютере сразу заметен прирост производительности, но на мобильных устройствах всё словно осталось прежним(а может даже и хуже). Что раньше я отрисовывал векторные фигуры, что сейчас делал растровый снимок всех фигур - на телефоне, вроде, ничего в производительности не поменялось. От чего это? Можно как-нибудь и не телефоне повысить производительность?

Старый 14.06.2015, 18:57
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 4  
Ответить с цитированием
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 567
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
На компе ты бы мог попробовать и метод cacheAsBitmap, на мобилах такое врядли поможет. Нужно использовать гпу.
__________________
Я заклинаю вас действовать иначе.

Старый 14.06.2015, 20:27
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 5  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от MrFOX Посмотреть сообщение
Можно как-нибудь и не телефоне повысить производительность?
да
__________________
return this...

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

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
MrFOX, для телефонов растр - слишком сложная задача. Адекватной производительности можно добиться только отрисовкой через gpu.

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

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

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


 


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


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