@@ -678,13 +678,12 @@ document.getElementById("down").addEventListener("click", function() {
678
678
} ) ;
679
679
680
680
/* キーボードイベント
681
- * キーを押したときに実行
682
681
* 旧式のキーコードでは非推奨になっていたためこれをcodeで置き換えた
683
682
* https://developer.mozilla.org/ja/docs/Web/API/KeyboardEvent/code
684
- *
685
- * 今回はキーを押したときに実行するのでkeydownを使用
683
+ * https://developer.mozilla.org/ja/docs/Web/API/Document/keyup_event
686
684
* https://developer.mozilla.org/ja/docs/Web/API/Document/keydown_event
687
685
*/
686
+ // キーを押したときに実行
688
687
window . addEventListener (
689
688
"keydown" ,
690
689
( event ) => {
@@ -748,11 +747,8 @@ window.addEventListener(
748
747
// 左回転
749
748
case "KeyQ" :
750
749
case "KeyZ" :
751
- // 一時停止中・開始前・ゲームオーバーなら動かさない
752
- if ( playingState || gameOver ) return ;
753
-
754
- // 左に回転させる
755
- rotateKey = ! rotateKey ;
750
+ // 一時停止中・開始前・ゲームオーバーもしくは回転ボタンを押した状態なら動かさない
751
+ if ( playingState || gameOver || ! rotateKey ) return ;
756
752
757
753
// 回転音の再生
758
754
soundRotate . currentTime = 0 ;
@@ -776,8 +772,8 @@ window.addEventListener(
776
772
// 右回転
777
773
case "KeyE" :
778
774
case "ArrowUp" :
779
- // 一時停止中・開始前・ゲームオーバーなら動かさない
780
- if ( playingState || gameOver ) return ;
775
+ // 一時停止中・開始前・ゲームオーバーもしくは回転ボタンを押した状態なら動かさない
776
+ if ( playingState || gameOver || ! rotateKey ) return ;
781
777
782
778
// 右に回転させる
783
779
rotateKey = ! rotateKey ;
@@ -805,5 +801,24 @@ window.addEventListener(
805
801
true , // キャプチャー
806
802
) ;
807
803
804
+ // キーを離したときに実行
805
+ document . addEventListener (
806
+ "keyup" ,
807
+ ( event ) => {
808
+ if ( event . defaultPrevented ) return ; // イベントがすでに処理されている場合は何もしない
809
+
810
+ // キーに応じて処理を分ける
811
+ switch ( event . code ) {
812
+ // 回転ボタンが押されていない場合は
813
+ case "KeyE" :
814
+ case "ArrowUp" :
815
+ case "KeyQ" :
816
+ case "KeyZ" :
817
+ // 回転ボタンを押せるようにする
818
+ rotateKey = true ;
819
+ break ;
820
+ }
821
+ } ) ;
822
+
808
823
setInterval ( graph , fps ) ; // フレームの最後に実行
809
824
loop ( ) ; // メインループを実行
0 commit comments