11. 全ての入力状態を取得する。


先ほどの関数ではどれか1つの取得状態しか得る事が出来ませんでした。
もしも大量にキー入力をチェックしたければ何度もCheckHitKey関数を呼ばなければなりません。
しかしCheckHitKey関数はとても無駄の多い関数のため、何度も呼ぶのは良くありません。

そこである瞬間のキー入力を全て一度にチェックしてくれる関数があります。
その関数はGetHitKeyStateAll関数といい、配列に全てのキー入力データを格納してくれます。
例えばエンターが押されているか調べる場合、使い方はこのようになります。

char Buf[ 256 ] ;
GetHitKeyStateAll( Buf ) ;
if( Buf[ KEY_INPUT_RETURN ] == 1 )
  printf("エンターが押されています。\n");

まず、全てのキー入力状態のデータを格納するための配列をキャラ型で要素256個用意しましょう。
ここで先ほどの配列のポインタを引数にして関数をよんでやります。
すると配列Bufには全てのキー入力データが入ります。
(((実は先ほどのキーコードは0〜255の数字に対応しているんです。
ですから配列要素に先ほどのキーコードを指定してやる事で、そのキー入力状態がわかるようになっています。

サンプルではZキー、Xキー、スペースキーが全て押されていると処理が終わるようになっています。

注:キーボードによっては3つ同時にキーが押せない場合がありますのでご注意下さい。

↓コピー&コンパイル用サンプルプログラム↓


#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ;      //ウィンドウモードに変更
        if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 
 
        int White ;   
        char KeyBuf[ 256 ] ;
        White = GetColor( 255 , 255 , 255 ) ;//色の取得
 
        DrawString( 170 , 240 , "Z,X,スペースを同時に押すと終了します。" , White );
        
        while( 1 ){
                GetHitKeyStateAll( KeyBuf ) ;                   // すべてのキーの状態を得る
 
                if( KeyBuf[ KEY_INPUT_Z ] == 1 && KeyBuf[ KEY_INPUT_X ] == 1 && KeyBuf[ KEY_INPUT_SPACE ] == 1 )
                        break ;
 
                if( ProcessMessage() == -1 ) break ;//エラーが起きたら終了
        }
 
 
        DxLib_End() ;           // DXライブラリ使用の終了処理
        return 0 ;              // ソフトの終了
}

実行結果

→掲示板で質問する



- Remical Soft -