3

オブジェクトが矢印キーで左右に移動する小さなゲームを作成していますが、その動きは速くなく、インタラクティブでさえありません。ユーザーエクスペリエンスの観点から、どのように改善できるかを誰でも提案できます。

これは、移動オブジェクトを制御するコードの一部です(2プレーヤーゲームなので、1つは矢印キー、2つ目はAWDです)

$(document).keydown(function(e){

switch(e.keyCode){
    //Move left
    case 37:
    $('.playerOne').stop().animate({"left":"-=15px"}, '1000', 'linear');
    return false;
    break;
    //Move right
    case 39:
    $('.playerOne').stop().animate({"left":"+=15px"}, '1000', 'linear');
    return false;
    break;
    //Shoot
    case 38:
    shotEffect(1,'hitOne','bottom','playerOne');
    break;
    //Move right
    case 68:               
            $('.playerTwo').stop().animate({"left":"+=15px"}, '1000', 'linear');
    return false;
    break;
    //Move left
    case 65:
    $('.playerTwo').stop().animate({"left":"-=15px"}, '1000', 'linear');
    return false;
    break;
    //Shoot
    case 87:
    shotEffect(1,'hitTwo','top','playerTwo');
    break;
}

});

前もって感謝します

4

1 に答える 1

4

キーボード入力に対する応答が遅い理由の 1 つは、JavaScriptkeydownイベントまたは同様のキーボード イベントをリッスンしていることです。ただし、繰り返されるキーボード イベントは、ユーザーのコントロール パネルで設定されているように、キーボードの最初の繰り返し遅延と繰り返し速度の影響を受けます。

たとえば、デフォルト設定の Windows システムでは、最初のキーボード遅延はかなり長く、0.5 秒程度に設定されています。したがってkeydown、キーが押されるとすぐにイニシャルが 1 つ取得されますが、最初の繰り返しkeydownはさらに 0.5 秒間発生しません。そして、その最初の遅延の後、keydownイベントの頻度はユーザーのリピート率に左右されます。

代わりに、どのキーが押されているかを常に追跡し、ゲーム ループで (おそらくrequestAnimationFrame()orを使用して)setInterval()現在押されているキーを確認する必要があります。このように、キーボードの繰り返しのタイミングは、ユーザーの設定ではなく、ゲーム ループの速度によって制御されます。

これを行う簡単な方法の 1 つは、keydrown ライブラリを使用することです。そのページのデモを試して、必要なことが行われるかどうかを確認してください。

また、問題と同様のコードについての議論を含むStackOverflow の回答もあります。

2つのうち、より完全に開発されているため、keydrownをお勧めしますが、SOの回答も見る価値があります。

もちろん、コードに他の問題がある可能性もありますが、これは確実に修正する必要があります。

于 2013-07-04T17:25:29.243 に答える