# キーボード入力に明確な契約を与える

> セマンティック キーを選択し、プレスとリリースの状態を処理し、ブラウザのデフォルトとの競合を回避することで、キーボード ゲームプレイを予測可能にします。

- URL: https://oneshotgems.ai/ja/topics/keyboard-controls-for-games
- カテゴリ: ゲーム開発者向け
- 種類: ガイド
- 更新日: 2026年10月5日

各キーに明確な役割があり、ゲームが押す動作と押し続ける動作を区別している場合、キーボード コントロールは信頼できると感じられます。実装する前に、意図したマッピングを書き留めてください。たとえば、矢印は方向を変え、スペースはアクションを実行し、エスケープはメニューが存在する場合にのみ一時停止メニューを開きます。次に、単一のキーダウンのみを検証するのではなく、フォーカス、繰り返し、リリースの動作をテストします。

## 意味とレイアウトでキーを選択

操作をキーボード配列で入力される文字に対応させる場合はKeyboardEvent.keyを使い、物理的なキーの位置に対応させる場合はKeyboardEvent.codeを使います。この違いはキーボード配列によって結果が変わります。一貫した割り当てを用意して説明に示し、誰もがWASDを使うと決めつけないようにします。

テキストフィールドや編集可能なコントロールにフォーカスがある間は、キー入力を横取りしないでください。ページのスクロールなどブラウザーの既定動作を止めるのは、ゲーム面がそのキーを実際に処理する場合だけにします。そうすれば、プレイヤーがゲーム領域に入る前に通常の文字入力を妨げたり、ブラウザーの操作を邪魔したりしません。

## 押下状態とキーの解放を管理する

連続移動では、keydownでキーの押下状態を有効にし、keyupで解除します。キーを押し続けるとブラウザーはkeydownを繰り返し送ることがあります。そのため、ジャンプのような一度だけの動作は、繰り返しが意図された仕様でない限り、反復を無視します。ゲームがフォーカスを失ったときやウィンドウが非アクティブになったときは、押下中のキーを解除します。フォーカスが別の場所に移るとkeyupがゲームに届かない場合があるためです。

2つのキーの同時入力、長押し、短いタップ、フォーカスを失ってから戻ったときの動作をテストします。一度だけ行う操作では、繰り返しが仕様でない限り、keydownの反復を無視します。MDNではKeyboardEvent.key、KeyboardEvent.code、イベントの種類が説明されています。操作の割り当てに合うプロパティを選びましょう。

## よくある質問

**ゲーム操作にはKeyboardEvent.keyとKeyboardEvent.codeのどちらを使うべきですか？** 入力された文字やキーボード配列に応じて操作するならKeyboardEvent.keyを使います。物理的なキーの位置に応じて操作するならKeyboardEvent.codeを使います。どちらを選んだか明示し、別の配列でもテストします。

**ページがフォーカスを失ったとき、なぜ押下中のキーを解除するのですか？** フォーカスが移ると、ブラウザーからゲームへkeyupが送られないことがあります。入力状態を消去しておけば、プレイヤーが戻ったときに移動が続いたままになるのを防げます。

## 気になることを、もっと

- [ブラウザ ゲームでのフォーカスの管理](https://oneshotgems.ai/ja/topics/game-focus-management): ゲームに可視のフォーカス状態を与え、オーバーレイが閉じた後にフォーカスを復元することで、キーボード入力、メニュー、リターン パスを予測可能にします。
- [複数の端末でブラウザーゲームの入力をテストする](https://oneshotgems.ai/ja/topics/testing-game-input-devices): 1 つのデスクトップ セッションに依存するのではなく、実際のタッチ、マウス、キーボード、方向の動作をカバーする小さな入力テスト マトリックスを構築します。
- [ブラウザゲームでのキースタックを防ぐ](https://oneshotgems.ai/ja/topics/preventing-stuck-game-keys): フォーカスや可視性が変化したときに保持された動きを安全に解放し、ゲーム入力がスタックしたままになる可能性のあるブラー、一時停止、再開パスをテストします。

## 関連情報

- [MDN: キーボードイベント](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent)

---
正規ページ: https://oneshotgems.ai/ja/topics/keyboard-controls-for-games
