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

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

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

Регистрация: May 2009
Сообщений: 33
По умолчанию Оптимизация кода

Всем привет! Делаю снег для приложения, необходимо как можно меньше использовать ресурсов. Может кто подскажет что еще здесь можно оптимизировать.

Код AS3:
package com.ximad.braincube.help{	
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.utils.Dictionary;
	public class Snow extends Sprite
	{		
		protected var snowflakes:Array;
		protected var snowflakeProps:Dictionary;
		protected var max_snowsize:Number = 0.1;
 
		protected var snowflakesCnt:Number = 150;
		protected var owidth:Number=640;
		protected var oheight:Number=360;
 
		protected var dO:Sprite;
		protected var o:Object;
		protected var cont:Sprite;	
 
		protected var xt:Number;
		protected var yt:Number;
 
		public function Snow(){			
			init();			
		}	
 
		protected function init():void{
			snowflakes = new Array();
			snowflakeProps = new Dictionary(true);
			cont = new Sprite();
			for (var i:int=0; i<snowflakesCnt; i++) {
				var t:Sprite = new SnowFlake();				
				t.x = Math.round(-5+Math.random()*(owidth+5));
				t.y = Math.round( -5 + Math.random() * (oheight + 5));			
				t.scaleX = t.scaleY=.5+Math.random()*(max_snowsize*10);
				o = new Object();
				o.k = 1+Math.random()*2;
				o.wind = -1.5+Math.random()*(2.2);
 
				snowflakeProps[t] = o;
 
				cont.addChild(t);
 
				snowflakes.push(t);
			}			
			cont.mouseEnabled = false;
			addChild(cont);
 
			addEventListener(Event.ENTER_FRAME, snowFlakeMover);			
		}
 
 
		public function snowFlakeMover(e:Event):void {						
			var i:int = snowflakesCnt;
			var ow:uint = owidth + 5;
			var oh:uint = oheight + 5;
			while(--i>-1){
				dO = snowflakes[i] as Sprite;
				o = snowflakeProps[dO];
				xt = dO.x;
				yt = dO.y;
 
				yt += o.k;
				xt += o.wind;
				if (yt>oh) {
					yt = -20;
				}
				if (xt>ow) {
					xt = Math.round(-5+Math.random()*ow);
					yt = -5;
				} else if (xt<-5) {
					xt= Math.round(-5+Math.random()*ow);
					yt = -5;
				}
				dO.y = yt;
				dO.x = xt;
			}				
		}
	}
}
Пробовал убрать Math.round но тогда медленнее работало, еще задумывался заменить random на самописный


Последний раз редактировалось BLOOD585; 22.11.2011 в 14:34.
Старый 22.11.2011, 15:26
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 2  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Что оптимизировать не знаю, но сделал SnowFlake() на основе png с прозрачным фоном - почти не тормозит с 60 fps. Но движение не плавное.

Старый 22.11.2011, 15:35
BLOOD585 вне форума Посмотреть профиль Отправить личное сообщение для BLOOD585 Найти все сообщения от BLOOD585
  № 3  
Ответить с цитированием
BLOOD585

Регистрация: May 2009
Сообщений: 33
Цитата:
Сообщение от Astraport Посмотреть сообщение
Что оптимизировать не знаю, но сделал SnowFlake() на основе png с прозрачным фоном - почти не тормозит с 60 fps. Но движение не плавное.
У меня SnowFlake это круг, нарисованный в самом флеше. Кстати как будет быстрее тут картинку или вектор?

На компе нет в принцыпе проблем, но я делаю для телефона, а там эта мелоч добавляет нагрузки. Может еще что то тут можно поджать)))

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Говорят картинка лучше.

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Ещё можно вместо массива использовать Vector, говорят что вроде у него быстрее доступ к элементам в нём. А вот у Dictionary с доступом кажется как раз и не очень-то. И вместо спрайта можно и Shape сделать. Но я не смотрел на общий алгоритм снегопада, возможно там в самом коде можно сделать по другому...


Последний раз редактировалось samana; 22.11.2011 в 15:45.
Старый 22.11.2011, 15:44
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 6  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Нормальный объект снежинка не способна сама создать и хранить k и wind?
Выкиньте словарь в топку.

Нормальный объект снежинка не знает как ей двигаться? Метод update с расчетами!
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
на производительность в этом случае больше всего будет влиять способ отрисовки,
а не то каким образом хранятся инстансы снежинок или каким алгоритмом рассчитываются их таректории

самый лучший результат даст copyPixels(), используя такой метод отрисовки можно будет нарисовать хоть сотни сенжинок и не упасть ниже 30 фпс даже на телефоне

вот демка производительности этого метода http://www.electrotank.com/junk/mike/flash/copyPixel/
моя машина отрисовывает 15000 спрайтов этим методом при фпс выше 20

Добавлено через 9 минут
p.s. вот тут серия видеоуроков на эту тему от Lee Brimelow: http://gotoandlearn.com/play.php?id=140
__________________
Хороший отдых - половина работы.


Последний раз редактировалось artcraft; 22.11.2011 в 16:33.
Старый 22.11.2011, 17:04
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 8  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
у Dictionary с доступом кажется как раз и не очень-то
Как раз скорость доступа по ключу у Dictionary очень даже

Цитата:
самый лучший результат даст copyPixels(), используя такой метод отрисовки можно будет нарисовать хоть сотни сенжинок и не упасть ниже 30 фпс даже на телефоне
Вы меня извините, но это чушь. По крайней мере в контексте мобильных девайсов. Там свой мир, где операция блиттинга процессором (именно copyPixels) будет куда медленнее аппаратного блиттинга (это когда мы весь контент заменяем растром).

Не хочу казаться голословным, но поверьте - 60 fps на первом iPad достигается только при использовании обычного флешового рендера, copyPixels при тех же нагрузках дает от силы 30

Цитата:
Нормальный объект снежинка не знает как ей двигаться? Метод update с расчетами!
Вызов метода на каждый объект будет медленнее, чем обход объектов в цикле.
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 22.11.2011 в 17:06.
Старый 22.11.2011, 17:16
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 9  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Вы меня извините, но это чушь. По крайней мере в контексте мобильных девайсов. Там свой мир, где операция блиттинга процессором (именно copyPixels) будет куда медленнее аппаратного блиттинга (это когда мы весь контент заменяем растром).

Не хочу казаться голословным, но поверьте - 60 fps на первом iPad достигается только при использовании обычного флешового рендера, copyPixels при тех же нагрузках дает от силы 30
прошу у вас ссылку-пруф или убедительные аргументы или ссылку на источник вашей информации


вот пара ссылок подтверждающих то что я сказал:
http://www.adobe.com/devnet/games/ar...ed-models.html
http://www.kirupa.com/forum/showthre...ons-for-Mobile
__________________
Хороший отдых - половина работы.


Последний раз редактировалось artcraft; 22.11.2011 в 18:31.
Старый 22.11.2011, 17:17
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 10  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Вызов метода на каждый объект будет медленнее, чем обход объектов в цикле.
Обход двух объектов, один из которых динамический и использование их свойств для расчетов, медленее чем вызов метода у одного объекта?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

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

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


 


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


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