Что-то, что будет иметь огромное значение, - это использование for each(Object in Array)
вместо стандартной for
петли.
private function blowemup(e:Event):void
{
var newPosition:Number;
var i:ArrWordsObjectClass; // <-- don't know what the class for this is, just replace
for each(i in arrWordObjects)
{
newPosition = updatePosition(i.bitmap);
i.bitmap.x += newPosition;
i.bitmap.y += getRandomNumber();
}
}
Печатается цикл for each
, то есть экономится много времени, где обычно он пытается выяснить, какой arrWordObjects[i]
является каждой итерацией.
Кроме того, примечание: использование одной управляемой функции ENTER_FRAME и циклическая обработка всего содержимого вашего приложения, которое вы хотите обрабатывать в каждом кадре, намного эффективнее, чем применение сотен слушателей для объектов.
Обычно я создаю класс обработчика, который содержит ENTER_FRAME и массив, хранящий мои объекты, например:
package
{
import flash.events.Event;
import flash.display.Sprite;
public class Handler extends Sprite
{
// vars
public var elements:Array = [];
/**
* Constructor
*/
public function Handler()
{
addEventListener(Event.ENTER_FRAME, _handle);
}
/**
* Called on each dispatch of Event.ENTER_FRAME
*/
private function _handle(e:Event):void
{
var i:Element;
for each(i in elements)
{
i.step();
}
}
}
}
Затем я создаю базовый класс для всех объектов, которые я хочу обработать, содержащий функцию step()
, вызванную выше.
package
{
import flash.display.DisplayObject;
public class Element extends Object
{
// vars
public var skin:DisplayObject;
/**
* Called on each dispatch of Event.ENTER_FRAME at Handler
*/
public function step():void
{
// override me
}
}
}
Теперь просто расширьте Элемент своими объектами:
package
{
import flash.display.Sprite;
public class MyThing extends Element
{
/**
* Constructor
*/
public function MyThing()
{
skin = new Sprite();
skin.graphics.beginFill(0);
skin.graphics.drawCircle(0,0,40);
skin.graphics.endFill();
}
/**
* Override step
*/
override public function step():void
{
skin.x += 4;
}
}
}
И все началось!:
var handler:Handler = new Handler();
var m:MyThing;
var i:uint = 0;
for(i; i<10; i++)
{
m = new MyThing();
m.y = Math.random()*stage.stageHeight;
handler.elements.push(m);
addChild(m.skin);
}