2017-12-06 15 views
0

私は_getchを使用して、ゲームで金額を増やすためのキーボードストロークを取得しようとしています。もし私がお金をより速く増やしたいのであれば、シフトは押し下げられ、100のコントロールは押されている間に10秒でそれを行う最善の方法でしょうか?私がシフトを確認するだけであれば十分ですが、シフトをチェックしたい場合は、後でコントロールが機能しません。 100のための制御のために、それは動作しません場合、私は他に追加した場合シフトを押しているかどうかを確認する方法はありますか?

は1または10ずつ増加してチェック例えば、私はこの

key = _getch(); 
if (key == 224) 
{ 
    key = _getch(); 
    if (key == 75) // left arrow 
    { 
     if (GetAsyncKeyState(VK_SHIFT) 
      for (int i = 0; i < 10; i++) // go left 10 times 
        left(); 
     else 
      left(); 
    } 
} 

ような何かをしたいです。ほとんどの場合、GetAsyncKeyState関数を再度実行するとキー状態が正しく読み取られない可能性があります。

else if (GetAsyncKeyState(VK_CONTROL) 
    for (int i = 0; i < 100; i++) // go left 100 times 
     left(); 

可能な回避策はありますか?ありがとう!

+0

完全なユースケースを教えてください。ここでプログラマーがGetAsyncKeyState()を使用するよりも良い方法でお手伝いします。 –

+0

人は私が行っていることを誤解しているようです。私はプログラムが変更を加えずに1ずつカウンターを増分し、シフトが保持されている場合は10を、コントロールが保持されている場合は100だけ増分します。キーボードでは、if、else ifを実行し、shift、control、およびどちらもチェックしないでください。それは理にかなっていますか? – Alex

答えて

0

が判明コントロールのようなキーの

てみ組み合わせは、「フラッシュ」からコンソールを防ぎます。だから、エラーを引き起こすのはコントロールそのものの問題だったので、10秒間のwhile-shiftと100秒間のwhile-tabを使用することに決めました。私がそこにいるとは思っていないaltを使う方法があれば、それを使うだろう。これは、私が愚かで、問題を引き起こしているcmdプロンプトと対話するキーバインドであることを認識するのに3時間もかかる典型的なケースです。

0

「if(GetAsyncKeyState(VK_SHIFT)& & GetAsyncKeyState(VK_CONTROL))」はどうですか? 1つのGAKS呼び出しを使用して複数のキーをチェックすることはできません。

+0

私は私の質問にちょっと変わった言葉を書いたらごめんなさい、私はシフトキーのために1つずつ10をインクリメントするために1つを保持するチェックを行い、そのチェックが失敗した場合は100をインクリメントする制御を行い、それ以外の場合は、1だけ増分します。 – Alex

0

以下のコードを試して、複数のキーを一緒に使用できることを確認してください。複数のキーを同時に押すことを認識するためのハードウェアによる制限がありますので、これをあなたの頭に入れておいてください。

メイン関数を呼び出し、

while(!keydown(VK_LCONTROL)) 
{ 
    if(keydown(VK_LCONTROL) && keydown(VK_NUMPAD1) && keydown(VK_UP)) 
    { 
     cout << "combo pressed!" << endl; 
    } 
    Sleep(10); 
} 

機能のKeyDown、

BOOL keydown(int key) 
{ 
    return (GetAsyncKeyState(key) & 0x8000) != 0; 
} 

(GetAsyncKeyState(キー)&は0x8000)!= 0;私たちは15番目のビットだけに興味があるので、これをチェックしてください。詳細は各ビットの情報を確認してください。コントロール+ numberpad1 +最大1の増分のため、コントロール+ numberpad2 +最大10の増分用など

+0

私の質問にちょっと奇妙な言葉を言ったら、すみません。私はプログラムが一度に複数の入力をチェックするのを望まなかった。私はちょうど2つの別々のシフトキーのために1つの10のインクリメントのための1つを保持し、チェックが失敗した場合、それが100のインクリメントになる制御のための1つを行い、最後に別のものが1だけ増分する。 – Alex

関連する問題