Показать сообщение отдельно
Старый 26.11.2008, 03:01
ZlPredator вне форума Посмотреть профиль Отправить личное сообщение для ZlPredator Найти все сообщения от ZlPredator
  № 3  
Ответить с цитированием
ZlPredator

Регистрация: Nov 2008
Сообщений: 65
Во первых, не помешает объявлять тип локальных переменных (особенно важно для объектов). Иначе плеер будет при каждом вашем обращении к свойству или методу искать по таблице методов нужный (вместо быстрого вызова).

Во вторых, векторная графика требует много ресурсов (учитывая antialias краев и возможность сложных заполнителей). Необходимо избегать большого количества векторной графики и особенно ее постоянного изменения. Лучше было использовать свойства alpha и scale, чем постоянно перерисовывать. Еще можно попробовать создавать битмап по вектору и уже работать с ним:

Код AS3:
public class Tabl extends Sprite 
{
	private var radius:uint;
	private var frame:uint  = Math.round(Math.random() * 1000);
	private var color:Number = 0xFFFFFF * Math.random();
 
	public function Tabl(xx,yy,rr) {
		x = xx;
		y = yy;
		radius = rr;
		var n:Graphics = this.graphics;
		n.clear();
		n.beginFill(color);
		n.drawCircle(0, 0, radius);
		n.endFill();
		var b:BitmapData = new BitmapData(radius*2,radius*2);
		var m:Matrix = new Matrix();
		m.translate(radius,radius);
		b.draw(this,m);
		n.clear();
		var bmp:Bitmap = new Bitmap(b,"auto",true);
		bmp.x = bmp.y = -radius;
		addChild(bmp);
	}
 
	public  function  anim(f:uint):void
	{
		var aa:Number = (1 + Math.sin((frame + f) * 0.1)) * 0.5;
		alpha = aa;
		width = height = radius * aa;
	}
 
}
Если известно что фон фиксированного цвета, можно убрать альфа канал в изображении (будет быстрее).

Если и это не помогает, то необходимо уменьшать количество элементов (или площади перерисовки) или уменьшать качество отрисовки.