トップページ > 記事閲覧
リアルタイムにキー入力を反映させたい
名前:parsley 日時: 2019/03/26 17:33

いつも楽しく使わせて頂いています。 迷路を自動で探索するゲームを作っているのですが、迷路の描画や探索の処理が多いためか、 ループ中にキー入力を受け付けないタイミングが発生してしまいます。 具体的には、下記のプログラムの「1区画だけ迷路を描く〜ゴール処理」のタイミングでキー入力を行っても一時停止してくれません。 そのため、裏でキー入力を監視しリアルタイムにフラグを変更する様な処理を作りたいのですが、どの様に記述したら良いのでしょうか。 もしくは、ループ中にリアルタイムにキー状態を取得する方法はあるのでしょうか? //---------------------------------------------------------------------- // Escキーが押されたら強制終了 while (input[KEY_INPUT_ESCAPE] != 1) { // キーの押下状態を取得 GetHitKeyStateAll(input); // スペースキーが押されたら一時停止フラグをON if (input[KEY_INPUT_SPACE] == 1) { WaitTimer(150); Pause_flg = 1; } // 一時停止フラグがONであれば一時停止処理 if (Pause_flg == 1) { Pause_flg = 0; while (1) { // キーの押下状態を取得 GetHitKeyStateAll(input); // 一時停止中にスペースキーが押されたら一時停止を解除 // UPキーが押されたら迷路を1歩前進(1歩だけ進んで再度一時停止処理に入る) if (input[KEY_INPUT_SPACE] == 1) break; else if (input[KEY_INPUT_UP] == 1) { Pause_flg = 1; break; } //ウィンドウメッセージを処理 if (ProcessMessage() == -1) break; } } // 画面をクリア ClearDrawScreen(); // 1区画迷路を描く draw_maze(); // 1区画迷路を探索する search(); // ゴール処理 GOAL(); //ウィンドウメッセージを処理 if (ProcessMessage() == -1) break; } //----------------------------------------------------------------------
メンテ

Page: 1 |

Re: リアルタイムにキー入力を反映させたい ( No.1 )
名前:管理人 日時:2019/03/23 01:15

GetInputChar は入力されたキー情報をストックしてくれるので、本件のような処理に適していると思います // キーの押下状態を取得 GetHitKeyStateAll(input); // スペースキーが押されたら一時停止フラグをON if (input[KEY_INPUT_SPACE] == 1) { WaitTimer(150); Pause_flg = 1; } // 一時停止フラグがONであれば一時停止処理 if (Pause_flg == 1) { Pause_flg = 0; while (1) { // キーの押下状態を取得 GetHitKeyStateAll(input); // 一時停止中にスペースキーが押されたら一時停止を解除 // UPキーが押されたら迷路を1歩前進(1歩だけ進んで再度一時停止処理に入る) if (input[KEY_INPUT_SPACE] == 1) break; else if (input[KEY_INPUT_UP] == 1) { Pause_flg = 1; break; } //ウィンドウメッセージを処理 if (ProcessMessage() == -1) break; } } こちらを int InputChar ; // キーの押下状態を取得 InputChar = GetInputChar( TRUE ) ; // スペースキーが押されたら一時停止フラグをON if (InputChar == ' ') { WaitTimer(150); Pause_flg = 1; } // 一時停止フラグがONであれば一時停止処理 if (Pause_flg == 1) { Pause_flg = 0; while (1) { // キーの押下状態を取得 InputChar = GetInputChar( TRUE ) ; // 一時停止中にスペースキーが押されたら一時停止を解除 // UPキーが押されたら迷路を1歩前進(1歩だけ進んで再度一時停止処理に入る) if (InputChar == ' ') break; else if (InputChar == CTRL_CODE_UP) { Pause_flg = 1; break; } //ウィンドウメッセージを処理 if (ProcessMessage() == -1) break; } } このように変更してみてください 「1区画だけ迷路を描く〜ゴール処理」のタイミングで行われたキー入力にも反応するはずです
メンテ
Re: リアルタイムにキー入力を反映させたい ( No.2 )
名前:parsley(解決) 日時:2019/03/26 17:33

>>管理人様 ありがとうございます。 おかげ様で無事にキー入力が反応してくれる様になりました。 丁寧なコードまでお書き頂き、苦労無く導入する事が出来ました。 大変お忙しい中、本当にありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存