40a. 「キーがどれ位押されたか」を判定する関数

DXライブラリ本体にはキー入力において、「押しているか」「押していないか」しか調べる関数がありません。
しかし、「どれ位押し続けられたか」を調べたい事は必ず出てくると思います。

そこで、キーが押されているかどうかに、加え、「どれ位押し続けられたか」を判定する関数を作ってみます。
これはGetHitKeyStateAllという本家の関数を拡張した物です。
この関数を呼ぶ代わりにこれから実装するGetHitKeyStateAll_2を利用して下さい。
元の関数の仕様は是非チェックしておいて下さい。

int GetHitKeyStateAll( char *KeyStateBuf ) ;
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R5N28


このフォーマットに習ってGetHitKeyStateAll_2関数の仕様を書いてみますと・・。

宣言 int GetHitKeyStateAll_2( int *KeyStateBuf ) ;

概略 キーボードのすべてのキーの押下状態を取得し、それぞれがどれ位押されたかを観測する

引数 int *KeyStateBuf : すべてのキーの押下状態を格納するバッファのポインタ

戻り値 0:成功 (特に現時点で返り値の意味無し)

解説 それぞれのキー情報KeyStateBufについて、押したカウント数が入ります。

例えば、

int Key[256];

を用意して、エンターを押し続けた状態で

GetHitKeyStateAll_2(Key);

を100回呼べばその時

Key[KEY_INPUT_RETURN]は100が入っています。

エンターを離した瞬間0になります。
つまり、今の瞬間押したかどうかを判定したい時はこれが1であるかどうかを
調べればよく、これはメニュー画面などでよく用います。

※注意※
int Key[256]; であることに注意して下さい。

サンプル

エンターが押されたカウントを表示し、押された瞬間画面を白くする


#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 -