Столкнулся с проблемой - собственно тормозами... делаю проект, в котором на фоне падают монеты.
так вот: в среднем их одновременно на экране - около 20, ну плюс минус, но при этом возникают заметные глазу подтормаживания((( Собственно, я поискал советов по оптимизации, и парочку использовал... дело несколько улучшилось, но подвисания пока слишком заметны. эксперементальным путем установил, что они именно из-за этого элемента программы(((
Реализую я все это дело следующим образом -есть функция droping(), отвечающая за выброс монет. и функция moving() отвечающая за их падения.
первая вызывается с помощью setInterval с периодом = 350 - на практике показалось что он работает лучше таймера(вроде бы)
ну а moving -из слушателя события enterFrame.
вот. плюс положение и параметры монетки определяются с использованием math.random(), который вроде прожорливый, как говорят.
выглядит все это следующим образом:

Код AS3:
package Src {
import flash.display.MovieClip;
import flash.events.TimerEvent;
import flash.events.Event;
public class FallingBack extends MovieClip{
//static parameters:
static var maxDrop = 2;
public static var addFB:Number=0;
static var arr:Array = new Array();
static var level = 1;
static var nominals:Array = new Array(1,10,100,500);
static var freq:int;
static var speed:int=5;
static var angSpeed:int = 5;
var realSpeed:int;
var realAS:int;
//static var
public static function droping(e=null):void
{
//Main.THIS.ltx.text = String(arr.length);
//addFB = 2;
//если набралось больше одной монетки для сбрасывания, но их не больше чем критическое кол-во:
if(addFB >= 1 && arr.length < 26)
{
var t:FallingBack;
freq = int(addFB);
if(freq> maxDrop) freq = maxDrop;
//c = freqs[level];
//так я определяют номинал монетки
var nom:int;
for(var i:int=0; i< freq; i++)
{
if(addFB >= 10000)
{
nom=6;
addFB -= 10000;
}
else if(addFB>= 5000)
{
nom=5;
addFB -= 1000;
}
else if(addFB>= 1000)
{
addFB -= 500;
nom =4;
}
else if(addFB>= 500)
{
addFB -= 100;
nom=3;
}
else if(addFB>= 100)
{
addFB -= 10;
nom=2;
}
else
{
addFB --;
nom=1;
}
t = new FallingBack(nom);
Main.THIS.FB_mc.addChild(t);
}
}
}
public static function moving():void
{
var L:int = arr.length;//обходим все созданные монетки
for (var key:int=L-1; key>=0; key--)
{
arr[key].mov();//двигаем с учетом персональных угловой и линейной скоростей
if(arr[key].y>800)
{
Main.THIS.FB_mc.removeChild(arr[key]);
arr.splice(key,1);
}
}
}
function mov():void
{
y+= realSpeed;
rotation += realAS;
}
public function FallingBack(t:int) {
//определяем стартовое положение и скорости
gotoAndStop(t);
x=int(Math.random()*610)+ 110;
y=100;
//rotation = int(Math.random()*360);
arr.push(this);
realSpeed = speed+ int(10*Math.random());
//trace('speed='+realSpeed);
realAS = int(Math.random()*angSpeed) - angSpeed/2;
}
}
}
Вот. Вопрос - реально ли как-то реализовать обход 20-30ти объектов и их перемещение без чертовых тормозов? Собственно не так. Я видел, что реально... но КАК?
Буду рад любому совету, спасибо)
ps: fps= 24, имеет ли это значение вообще?