キー入力処理を行うGetHitKeyStateAll_2という関数を先ほどサンプルから取ってきてペタっと貼りましたね。
先ほどのままではKeyという関数をグローバル変数にしなければなりませんが、
どこでも値が書き換わってしまうグローバル変数はなるべく少なくしたいものです。
そこで同じグローバル変数でも、なるべくバグ発生の確率が下がるような使い方を試みてみます。
--key.cpp変更-- #include "../include/GV.h" unsigned int stateKey[256]; int GetHitKeyStateAll_2(){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key[i]==1) stateKey[i]++; else stateKey[i]=0; } return 0; } int CheckStateKey(unsigned char Handle){ return stateKey[Handle]; }
//現在のキー入力処理を行う extern int GetHitKeyStateAll_2(); //受け取ったキー番号の現在の入力状態を返す extern int CheckStateKey(unsigned char Handle);
--main.cpp変更-- #define GLOBAL_INSTANCE #include "../include/GV.h" //現在のキー入力処理を行う extern int GetHitKeyStateAll_2(); //受け取ったキー番号の現在の入力状態を返す extern int CheckStateKey(unsigned char Handle); //ループで必ず行う3大処理 int ProcessLoop(){ if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す GetHitKeyStateAll_2();//現在のキー入力処理を行う return 0; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ ChangeWindowMode(TRUE);//ウィンドウモード if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化 while(ProcessLoop()==0){//メインループ if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク ScreenFlip();//裏画面反映 } DxLib_End();//DXライブラリ終了処理 return 0; }
- Remical Soft -