1

ゲームを作る...これを行うにはもっと効率的ですか?

if (37 in keysDown) { //left arrow
    if (sprite.state != 'left') sprite.state = 'left';
}

またはこれ?

if (37 in keysDown) { //left arrow
    sprite.state = 'left';
}

これは私のゲームの更新関数で呼び出されています(常に、可能な限り高速に)。

補足:これが私の入力キーチェックコードです。

//input
var keysDown = {};
window.addEventListener('keydown', function(e) {
    keysDown[e.keyCode] = true;
});
window.addEventListener('keyup', function(e) {
    delete keysDown[e.keyCode];
});
4

2 に答える 2

4

私たちは小さな効率を忘れるべきです。たとえば、97%の確率で:時期尚早の最適化はすべての悪の根源です。」

http://c2.com/cgi/wiki?PrematureOptimization

これらの2つの方法は同じ複雑さを共有しており、4文字の変数を設定/変更してもアプリのボトルネックにはなりません。

ここで私が懸念しているのは、コードの可読性だけです。どちらの方法でもsprite.state値を取得したい場合left、なぜ以前の値を確認する必要があるのでしょうか。
(ああ、それはここでのパフォーマンスの向上と同じように、20ビットの帯域幅を節約します...)

于 2012-12-27T00:52:47.270 に答える
0

このようなものは、キーをループするよりもはるかに高速ではないでしょうか?変数を非常に迅速に継続的にチェックできます。

var keyleft=false;

window.onkeydown = keydown;
window.onkeyup = keyup;

function keydown(event)
{
    var keyCode = ('which' in event) ? event.which : event.keyCode;
    if (keyCode==37) keyleft=true;
}

function keyup(event)
{
    var keyCode = ('which' in event) ? event.which : event.keyCode;
    if (keyCode==37) keyleft=false;
}

このコードが機能するという保証はありません。jQueryなしで物事を行う方法を忘れてしまいました

于 2012-12-27T00:55:20.420 に答える