私はjavascriptのゲームを作っています。そして、私はこの基本的なgameloopエンジンを持っています。ゲームループの速度は、異なるコンピュータで異なります
var left = 0,
speed = documentHeight/300;
var keyState = {};
window.addEventListener('keydown',function(e){
keyState[e.keyCode || e.which] = true;
},true);
window.addEventListener('keyup',function(e){
keyState[e.keyCode || e.which] = false;
},true);
function gameLoop() {
if (keyState[39]) {
left -= speed;
move();
}
if (keyState[37]){
left += speed;
move();
}
function move() {
element.style.left = left + 'px';
}
setTimeout(gameLoop, 20);
}
gameLoop();
私はすべて100%の高さにしていますので、ドキュメントの高さに合わせて速度を設定しました。それは私のPC上でうまく動作し、サイズを変更しても一貫しています。しかし、私がiMacでテストしたところ、要素の動きははるかに遅くなりました。私もwindow.requestAnimationFrame(gameLoop)を試しましたが、同じことが起こります。
これはいくつかの画面でより多くのfpsを処理することと関連していますか?すべてのコンピュータ/スクリーンで一貫した速度を達成する最良の方法は何でしょうか?
requestAnimationFrameをご覧ください(例:https://stackoverflow.com/questions/19764018/controlling-fps-with-requestanimationframe) – keja
物理学とフレームレートを結合しないでください。 – zero298
将来の訪問者の明快さのために、zero298のコメントは、私の答えが説明していることを言うための素敵で簡潔な方法です。 – samanime