HTML5キャンバスとjavascriptを使用して小さなゲームに取り組んでいます。また、キーボードのキーがときどき「スタック」することを除けば、非常にうまく機能しています。キーダウンイベントは登録されますが、キーアップイベントが登録されない場合があります。これは通常、一度に複数のキーを押すと発生するため、一部はハードウェアまたはOSの障害ですが、これを回避する方法について誰かがアイデアを持っていることを期待しています。私のコードの関連部分(coffeescriptで書かれています):
press = (direction) ->
switch direction
when 'W'
game.keys.W = true
when 'S'
game.keys.S = true
when 'A'
game.keys.A = true
when 'D'
game.keys.D = true
release = (direction) ->
switch direction
when 'W'
game.keys.W = false
when 'S'
game.keys.S = false
when 'A'
game.keys.A = false
when 'D'
game.keys.D = false
doKeyDown = (evt) ->
switch evt.keyCode
when 87 then press 'W'
when 83 then press 'S'
when 65 then press 'A'
when 68 then press 'D'
doKeyUp = (evt) ->
switch evt.keyCode
when 87 then release 'W'
when 83 then release 'S'
when 65 then release 'A'
when 68 then release 'D'
window.addEventListener('keydown', doKeyDown, false)
window.addEventListener('keyup', doKeyUp, false)
基本的なもの。javascriptが完全にイベント駆動型でなくても問題はありませんが、何ができるでしょうか。問題を回避する方法についての私の現在の考えは、2つまたは3つのキーの容量を持つ、キーを押すためのキューを追加することです。制限を超えると、最初のキーが削除され、「false」に切り替えられます。 。それでも、回避できるはずのときに、このような人為的な制限を追加するのは奇妙に思えます!
したがって、問題は、回避策に頼ることなく、主要な状態を正確に保存するための簡単な方法があるかどうかです。できれば、ゲームのフレームレートとは関係なく機能するものが望ましいです(1000 fpsで実行されていても、3 fpsで実行されていても、同じように機能するはずです)。