2011-01-05 12 views
0

私はFlexでフラッシュゲームを作ることについて質問があります。 現在、私は2D戦闘ゲームを開発中です。ここにリンクがあります:http://xoz.netai.net/stickfightjx/StickFightJX.html自家製のフレックスゲームを最適化する最良の方法は?

しかし、私はメインループをどのように効率的にプログラミングしたのかよくわかりません。

私はチュートリアルを読んだことがなく、他のAdobe Flexのゲームも見たことがないので、それらの実装方法はわかりませんでした。私は、すべてのゲームオブジェクトとビューを更新する24フレームごとに更新関数を呼び出すTimerインスタンスを持っています。

これを高速化する方法はありますか?私は何も無駄にしていますか?

// This is in an MXML Application 

private var timer:Timer = new Timer(1/24); 

private function onInitialize(e:Event):void 
{ 
    timer.addEventListener(TimerEvent.TIMER, onUpdate); 
    timer.start(); 
} 

private function onUpdate(e:TimerEvent):void 
{ 
    gameStateManager.update(); 
} 

答えて

1

正常に動作するはずですが、フレームレートが予想よりも低い低速のコンピュータで問題が発生する可能性があります。

滑らかなアニメーションの場合は、代わりにENTER_FRAMEイベントを待ち受ける必要があります。 update()メソッドは、最後のフレーム以降の時間デルタをパラメータとして使用する必要があります。これを使用して、オフフレームではなく時間をずらして計算を行うことができます。例えば

:この場合

... 
// Called from your original code. 
private function update():void 
{ 
    xPos += 10; 
    yPos += 5; 
} 
... 

、更新オブジェクトは、そのXPOSとYPOSメンバーができるだけ頻繁にタイマーイベントが呼び出されるように、それぞれ10および5で増加しているであろう。遅いコンピュータでは、CPUは追いつくことができず、更新の間隔は長くなり、ゲーム全体が遅くなり、戦いがずっと楽になります。

アップデートもフレームレートと同期していないため、アニメーションが不安定に見えます。これは、キャンバスが再びレンダリングされる前に複数の更新が存在することがあり、オブジェクトがそのフレームのxPosとyPosを20と10ずつ変更することがあるためです。この場合

... 
// Called from ENTER_FRAME with the time since the last call passed in. 
private function update(deltaT:Number):void 
{ 
    xPos += 10 * deltaT; 
    yPos += 5 * deltaT; 
} 
... 

(あなたのデルタTが秒である場合)、更新対象は関係なく、CPUがどのように遅いの1秒に1回、それぞれ10と5でそのXPOSとYPOSメンバーを変更します。 ENTER_FRAMEイベントを使用しているので、キャンバスがレンダリングされるたびに1回だけ更新が行われます。

関連する問題