大きな違いを生むものは、標準のループ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]
また、補足:1つの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
}
}
}
次に、オブジェクトでElementを拡張します。
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);
}