teratail header banner
teratail header banner
質問するログイン新規登録
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

5221閲覧

c++ コンソールアプリで キー入力をリアルタイムで認識したい。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/12/01 03:48

編集2020/12/01 03:53

0

0

提示コードの_gech();部ですがキーを何度も押さないと入力されたことにならず入力がリアルタイムでできません。どうすればいいのでしょうか?代行手段を探していますが見つかりません。

cpp

1void Main_Screen::Input() 2{ 3 4 if (mInput->InputDown() == KeyCode::Space) 5 { 6 if (mPlayer->mPause == false) 7 { 8 mPlayer->mPause = true; 9 } 10 else 11 { 12 mPlayer->mPause = false; 13 } 14 15 } 16 else if (mInput->InputDown() == KeyCode::Left) 17 { 18 19 } 20 else if (mInput->InputDown() == KeyCode::Right) 21 { 22 23 } 24 else if (mInput->InputDown() == KeyCode::Up) 25 { 26 mPos_y--; 27 } 28 else if (mInput->InputDown() == KeyCode::Down) 29 { 30 mPos_y++; 31 32 } 33 34} 35

//////////////////////////////////////////////////////////////

cpp

1// キー入力 2KeyCode Input_Key::InputDown() 3{ 4 5 char p = _getch(); 6 if (p == 0x4d)//右 7 { 8 return KeyCode::Right; 9 } 10 else if (p == 0x4b)//左 11 { 12 return KeyCode::Left; 13 14 } 15 else if (p == 0x48)//上 16 { 17 return KeyCode::Up; 18 19 } 20 else if (p == 0x50)//下 21 { 22 return KeyCode::Down; 23 } 24 else if (p == 0x20)//スペースキー 25 { 26 return KeyCode::Space; //スペースキー 27 } 28 else if (p == 0x1b)//ESCキーで強制終了 29 { 30 exit(0); 31 } 32 else 33 { 34 return KeyCode::Invalid; 35 } 36 37} 38 39

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

修正前のキー入力では入力されたキーを変数に入れていなかったためでした。

修正前

cpp

1void Main_Screen::Input() 2{ 3 4 if (mInput->InputDown() == KeyCode::Space) 5 { 6 if (mPlayer->mPause == false) 7 { 8 mPlayer->mPause = true; 9 } 10 else 11 { 12 mPlayer->mPause = false; 13 } 14 15 } 16 else if (mInput->InputDown() == KeyCode::Left) 17 { 18 19 } 20 else if (mInput->InputDown() == KeyCode::Right) 21 { 22 23 } 24 else if (mInput->InputDown() == KeyCode::Up) 25 { 26 mPos_y--; 27 } 28 else if (mInput->InputDown() == KeyCode::Down) 29 { 30 mPos_y++; 31 32 } 33 34}

修正後

cpp

1 2void Main_Screen::Input() 3{ 4 5 KeyCode Key = mInput->InputDown(); 6 7 if (Key == KeyCode::Space) 8 { 9 if (mPlayer->mPause == false) 10 { 11 mPlayer->mPause = true; 12 } 13 else 14 { 15 mPlayer->mPause = false; 16 } 17 18 } 19 else if (Key == KeyCode::Left) 20 { 21 22 } 23 else if (Key == KeyCode::Right) 24 { 25 26 } 27 else if (Key == KeyCode::Up) 28 { 29 mPos_y--; 30 } 31 else if (Key == KeyCode::Down) 32 { 33 printf("いいいいい\n"); 34 35 mPos_y++; 36 } 37 38} 39

投稿2020/12/01 04:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

_getch();

なんでキー入力を読み捨ててるんですか?

投稿2020/12/01 03:50

y_waiwai

総合スコア88180

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/01 03:54

提示コードを修正しました。しかし修正後の状態でも同じ感じで数回キーを押さないと認識してくれません。
y_waiwai

2020/12/01 04:01

どういうデータが渡ってるのかプリントするなりしてみたらどお? 中でなにが起こっているのか確認するぐらいやりましょうよ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問