Показать сообщение отдельно
Старый 23.02.2011, 21:57
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 10  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Кстати, на мой взгляд, все, что не требует векторных преобразований в процессе визуализации, надо гнать в растр. Лучше самостоятельно. Векторное дерево с cashAsBitmap и оно же собранное и целиком записанное как битмап - две большие разницы.

Но к рассматриваемому случаю это не относится.
Вопрос к автору - если убрать текст (вообще), производительность повышается? Если повышается, можно попробовать заэмбедить шрифт в тексфилд. Если не повышается - подумать, как уменьшить количество вычислений. Тут, опять же, можно заменить сложные вычисления на простые (itemNamed.x += 2; ) и посмотреть, как все шевелится. Если 100 пустых квадратов без текста, передвигаемые за итерацию на 2 пикселя, не будут шевелиться - значит достигнут предел производительности ФП.

Добавлено через 22 минуты
на самом деле я вот тут запустил 1000 полосочек в упрощенном режиме, тормозов нет вообще:

Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite 
	{
 
		private var clips:Array = new Array();
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			ClipForMoving.xBound = 700;
			ClipForMoving.yBound = 500;
 
			for (var i:int = 0; i < 1000; i++)
			{
				var startX:int = 50 + int(Math.random() * 600);
				var startY:int = 50 + int(Math.random() * 400);
				var dX:int = -10 + int(Math.random() * 20);
				var dY:int = -10 + int(Math.random() * 20);
				var rotationSpeed:int = 1 + int(Math.random() * 90);
				var clipForMoving:ClipForMoving = new ClipForMoving(startX, startY, dX, dY, rotationSpeed);
				addChild(clipForMoving);
				clips.push(clipForMoving);
			}
 
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
 
		}
 
		private function onEnterFrame(e:Event) : void
		{
			var clipsCount:int = clips.length;
			for (var i:int = 0; i < clipsCount; i++)
			{
				clips[i].move();
			}
 
		}
 
	}
 
}
 
 
package  
{
	import flash.display.Sprite;
 
	public class ClipForMoving extends Sprite
	{
		public static var xBound:int;
		public static var yBound:int;
 
		private var dX:int;	
		private var dY:int;
		private var rotationSpeed:int;
 
		public function ClipForMoving(x:int,y:int,dX:int,dY:int,rotationSpeed:int) 
		{
			this.x = x;
			this.y = y;
			this.dX = dX;
			this.dY = dY;
			this.rotationSpeed = rotationSpeed;
 
			graphics.beginFill(0xff0000);
			graphics.drawRect( -5, 0, 10, 2);
			graphics.endFill();
		}
 
		public function move() : void
		{
			this.x += dX;
 
			if (this.x > xBound && dX > 0) dX = -dX;
			if (this.x < 0 && dX < 0) dX = -dX;
 
			this.y += dY;
			if (this.y > yBound && dY > 0) dY = -dY;
			if (this.y < 0 && dY < 0) dY = -dY;
 
			this.rotation += rotationSpeed;
		}
 
	}
 
}
Добавлено через 28 минут
Вот пример, если лень компилировать:
http://mikhailk.ru/testing/clipMoving/

Добавлено через 1 час 24 минуты
Стало интересно, попробовал с текстом, производительность упала примерно в 6 раз.
http://mikhailk.ru/testing/clipMoving/withText.html


Последний раз редактировалось mikhailk; 23.02.2011 в 23:22.