2012-12-18 25 views
18

モバイルデバイス用のキャンバスアニメーションを使用したHTML5ゲームの場合。setTimeoutまたはsetIntervalまたはrequestAnimationFrame

私は、各デバイスと他のデバイスとの間で速度が異なるいくつかのパフォーマンス上の問題に直面しています。

requestAnimationFrameデバイスの速度に従ってゲームのアニメーションをスピードアップします。
setIntervalは、デバイスから別のデバイスへの遅延があることに私に衝撃を与えました。
setTimeoutキャンバスでの描画も遅くなります。

モバイルHTML5ゲームの経験者は、キャンバス上のアニメーションを開発するための3つの方法(または使用可能な他のテクニック)を、さまざまなモバイルデバイスで安定させるための最良の方法を教えてくれますか?

答えて

19

可能であれば、常に​​を使用してください。これはそのためです。 use a shim for supportでない場合は最善ですので、具体的な詳細を扱う必要はありません。

実際の方法が使用されているにもかかわらず、アニメーションやゲームロジックが同じ速度で実行されるためには、時間ベースのアニメーションや物理などの時間ベースの計算を使用する必要があります。

+0

アンドロイド携帯電話のブラウザ上の古いバージョンのため、この機能はrequestAnimationFrameの(HTC)をサポートしていません....私はこのサイトを試してみてくださいhttp://ie.microsoft.com/testdrive /Graphics/RequestAnimationFrame/Default.htmlはHTCデバイスでサポートされていません。 – Solieman

+1

@Solieman Paul IrishはrequestAnimationFrameシムで素晴らしいブログ投稿を持っています:http://paulirish.com/2011/requestanimationframe-for-smart-animating/ – Jasper

+0

@Soliemanリンクしたコード(シム)は正しいものを使用します方法。 'requestAnimationFrame'がサポートされていない場合、自動的に他のメソッドの1つを使用します。ジャスパーのリンクにはもっと詳しい情報があります。 –

13
window.requestAnimFrame = function(){ 
    return (
     window.requestAnimationFrame  || 
     window.webkitRequestAnimationFrame || 
     window.mozRequestAnimationFrame || 
     window.oRequestAnimationFrame  || 
     window.msRequestAnimationFrame  || 
     function(/* function */ draw1){ 
      window.setTimeout(draw1, 1000/60); 
     } 
    ); 
}(); 
    window.requestAnimFrame(draw); 
})(); 

使用すべてのケース

+0

'1000/60'は何をしますか?単に結果/評価された人物ではないのですか?それとは別に、元のポスターにクレジットを付けずに['GitHub'](https://gist.github.com/mrdoob/838785)からコピーした解決策です –

関連する問題