ゲームには最大 10000 個のオブジェクトがあり、マウスが動かされていないときは正確に 60 (最大) FPS です。しかし、円を描くようにマウスを動かし始めると、FPS は平均 45 で 30 に到達しようとします。マウスを止めると、即座に 60 になります (プログラムがハートビートを失ったため)。SWF は、ブラウザなしでスタンドアロンで実行されます。
MouseEvent.MOUSE_MOVE
リスナーをすべて削除し、メイン クラスのmouseEnabled=false
とを作成しました。mouseChildren=false
FPS を 12 から 60 に 1 つずつ増やしました。生まれた各フレームに名前を付けましたが、そのうちの 15 人が何の理由もなく死んでいくのを見るのは本当につらいです...
サンプルコード:
public class Main extends Sprite
{
private var _periods : int = 0;
/** Idling FPS is 23. Move mouse to drop FPS to 21.*/
public function Main() : void
{
//true if need to drop FPS to 18 instead of 21 moving mouse:
const readyToKill2MoreFrames : Boolean = true;
if ( readyToKill2MoreFrames )
{
var ellipse : Sprite = new Sprite;
ellipse.graphics.beginFill( 0x00FF00 );
ellipse.graphics.drawEllipse( 300, 300, 400, 200 );
ellipse.graphics.endFill();
addChild( ellipse );
//uncomment to fall only to 21 instead of 18:
/*ellipse.mouseChildren = false;
ellipse.mouseEnabled = false;*/
}
var fps : TextField = new TextField;
//uncommenting doesn't change FPS:
//fps.mouseEnabled = false;
addChild( fps );
fps.text = "???";
fps.scaleX = fps.scaleY = 3;
var timer : Timer = new Timer( 1000 );
timer.addEventListener( TimerEvent.TIMER, function( ... args ) : void
{
fps.text = _periods.toString();
_periods = 0;
} );
timer.start();
addEventListener( Event.ENTER_FRAME, function( ... args ) : void
{
//seems like PC is too fast to demonstrate mouse movement
// drawbacks when he has nothing else to do, so let's make
// his attention flow:
for ( var i : int = 0; i < 500000; ++i )
{
var j : int = 2 + 2;
}
++_periods;
} );
}
}