40a. 「キーがどれ位押されたか」を判定する関数
DXライブラリ本体にはキー入力において、「押しているか」「押していないか」しか調べる関数がありません。
しかし、「どれ位押し続けられたか」を調べたい事は必ず出てくると思います。
そこで、キーが押されているかどうかに、加え、「どれ位押し続けられたか」を判定する関数を作ってみます。
これはGetHitKeyStateAllという本家の関数を拡張した物です。
この関数を呼ぶ代わりにこれから実装するGetHitKeyStateAll_2を利用して下さい。
元の関数の仕様は是非チェックしておいて下さい。
int GetHitKeyStateAll( char *KeyStateBuf ) ;
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R5N28
このフォーマットに習ってGetHitKeyStateAll_2関数の仕様を書いてみますと・・。
|
サンプル エンターが押されたカウントを表示し、押された瞬間画面を白くする #include "DxLib.h" int GetHitKeyStateAll_2(int KeyStateBuf[]){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++; else KeyStateBuf[i]=0; } return 0; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ int Key[256]; ChangeWindowMode(TRUE);//ウィンドウモード if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化 while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){ //↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_RETURN]);//エンター入力カウント if(Key[KEY_INPUT_RETURN]==1)//今の瞬間押されたら DrawBox(0,0,640,480,GetColor(255,255,255),TRUE);//画面全体を白い四角で表示 ScreenFlip(); } DxLib_End(); return 0; } |
- Remical Soft -