

初めて投稿させていただきます。

JavaScriptで簡単なゲーム開発をしております。  
今の課題はプレイヤーが敵に当たった時にキーを無効化して操作をできないようにすることです。  
現在はプレイヤーが敵に当たってもゲームオーバーのテキストのみ表示され、キーを押すとまた操作が可能になってしまいます。

調べたところキーを無効化するには、プレイヤーが敵に当たったら、 `return false`
を返すようにしてあげればいいという情報を得たのですが、私の書いてる場所が間違っているのか、他に書かなければならないコードが他にあるのか、 `return
false` を返してくれず、キーの操作が有効になっています。

`return false` はイベントハンドラーの中に書きました。

[code]

    addEventListener("keydown", function(event) {
      if (event.key == "ArrowUp") {
        sy -= 62.5;
        if (sy < 0) {
          sy = 32.5;
        }
      } else if (event.key == "ArrowDown") {
        sy += 62.5;
        if (sy > 500) {
          sy = 467.5;
        }
      } else if (event.key == "ArrowLeft") {
        sx -= 62.5;
        if (sx < 0) {
          sx = 32.5;
        }
      } else if (event.key == "ArrowRight") {
        sx += 62.5;
        if (sx > 500) {
          sx = 467.5;
        }
      }
      if (sx == ex && sy == ey) {
        return drawGameOver();　　　　
        return event.key = false;　
      }
    
      draw();
    });
    
[/code]

`return false` を書く適切な位置がもし分かる方、キーを有効化するために他にどのようなコードが必要になるか  
分かる方教えてください。


CC BY-SA 4.0
2020-03-27T03:27:39.937
64147
2020-03-27T10:40:06.433
2020-03-27T10:40:06.433
32986
38386
question
javascript
JavaScriptを使ったゲームで、ゲームオーバー時にキー入力を無効化をしたい


イベントハンドラで `return false`
した場合は、その処理中のイベントについてだけ、ブラウザのデフォルトの挙動をキャンセルします。デフォルトの挙動というのは、「テキストフィールドに文字を挿入する」「スペースキーでスクロール」などです。

この場合、キャンセルしたいのはブラウザのデフォルトの挙動ではないので、`return false` は関係ありません。

イベントハンドラの中でゲームがどういう状態かをチェックできるようにして、ゲームオーバー後だったら一切処理をしないようにすればよいでしょう。

[code]

    const State = {
      PLAYING: 0,
      GAME_OVER: 1
    };
    let gameState = State.PLAYING;
    
    addEventListener("keydown", function(event) {
      // ゲームオーバー後だったら何もしない
      if (gameState === State.GAME_OVER)
        return;
    
      // プレイ中はカーソルキーを処理する
      console.assert(gameState === State.PLAYING);
      if (event.key == "ArrowUp") {
        ...
      if (sx == ex && sy == ey) {
        gameState = State.GAME_OVER;
        drawGameOver();
        return;
      }
    
      draw();
    });
    
[/code]


CC BY-SA 4.0
2020-03-27T06:23:16.353
64151
2020-03-27T08:02:15.950
2020-03-27T08:02:15.950
3475
3475
64147
answer