これを行う最も簡単な方法は、各キーの追加プロパティを追跡することだと思います。キーが停止しているかどうかだけを調べるのではなく、前回のcheckInput()の繰り返しでキーがダウンしていたかどうかを調べることもできます。そうすることで、 "D"キーが押されていても、最後の反復でダウンしていなければ、ball.speedModifierから4を引いたものです。あるいは、 "D"キーがアップで、最後の反復でアップしていない場合は、ball.speedModifierに4を戻します。
この作業を行うための最後のキーは、すべてのcheckInputループの最後です。各キーが停止しているかどうかを保存します。その後、checkInput()の次のループでチェックをやり直す準備が整いました。
以下は疑似コードですが、うまくいけばよいと思います。
function checkInput(){
if(d.isDown()){
if(!d.wasDown()){
ball.speedModifer -= 4;
}
}else{
if(d.wasDown()){
ball.speedModifier += 4;
}
}
d.wasDown = d.isDown;
}
場合によっては、私も実際の例をまとめます。 3つの変更に注意してください。 pressedKeysは配列ではなく、既存のKEYオブジェクトのVALUESに対応するKeyCodeのオブジェクトです。そして、このキーの値は、 "wasDown"と "isDown"という2つのキーを持つオブジェクトそのものです。次に、init()の最後にこのオブジェクトをあらかじめ設定しておき、配列の代わりに新しいオブジェクトを使ってcheckInputでさまざまなチェックと更新を行います。
http://jsfiddle.net/gUgGf/
うまくいけば、それが役立ちます!
SO Q&Aは自己完結型である必要があります。 (特に対話的にコードを実行できる場合は)外部のペーストビンにリンクするのは良いですが、[最小サンプル](完全で簡潔な&代表)を質問に含めるべきですリンクされたページが取り下げられたり編集されたりします。 – outis