Skip to content

Commit 07cd2b4

Browse files
committed
442c949abc0e159f280af3538bde25207cf0a587 より復元 - キーが押されている場合回転できないように制御
1 parent 5d05c53 commit 07cd2b4

File tree

1 file changed

+25
-10
lines changed

1 file changed

+25
-10
lines changed

js/main.js

+25-10
Original file line numberDiff line numberDiff line change
@@ -678,13 +678,12 @@ document.getElementById("down").addEventListener("click", function() {
678678
});
679679

680680
/* キーボードイベント
681-
* キーを押したときに実行
682681
* 旧式のキーコードでは非推奨になっていたためこれをcodeで置き換えた
683682
* 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
686684
* https://developer.mozilla.org/ja/docs/Web/API/Document/keydown_event
687685
*/
686+
// キーを押したときに実行
688687
window.addEventListener(
689688
"keydown",
690689
(event) => {
@@ -748,11 +747,8 @@ window.addEventListener(
748747
// 左回転
749748
case "KeyQ":
750749
case "KeyZ":
751-
// 一時停止中・開始前・ゲームオーバーなら動かさない
752-
if(playingState || gameOver) return;
753-
754-
// 左に回転させる
755-
rotateKey = !rotateKey;
750+
// 一時停止中・開始前・ゲームオーバーもしくは回転ボタンを押した状態なら動かさない
751+
if(playingState || gameOver || !rotateKey) return;
756752

757753
// 回転音の再生
758754
soundRotate.currentTime = 0;
@@ -776,8 +772,8 @@ window.addEventListener(
776772
// 右回転
777773
case "KeyE":
778774
case "ArrowUp":
779-
// 一時停止中・開始前・ゲームオーバーなら動かさない
780-
if(playingState || gameOver) return;
775+
// 一時停止中・開始前・ゲームオーバーもしくは回転ボタンを押した状態なら動かさない
776+
if(playingState || gameOver || !rotateKey) return;
781777

782778
// 右に回転させる
783779
rotateKey = !rotateKey;
@@ -805,5 +801,24 @@ window.addEventListener(
805801
true, // キャプチャー
806802
);
807803

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+
808823
setInterval(graph, fps); // フレームの最後に実行
809824
loop(); // メインループを実行

0 commit comments

Comments
 (0)