40b. 「マウスがどれ位押されたか」を判定する関数
一つ上の40a章のマウス版です。マウスも、キー同様に今の瞬間押されたか、押されてからどれ位たっているかを確認したい場合があります。
マウスを使ったゲームを作る場合はいつもこの関数を呼んであげましょう。
上のフォーマットに習ってGetHitMouseStateAll_2関数の仕様を書いてみます。
この関数には、独自に定義したMouse_t型が必要なので、関数を宣言する前にこの定義を一緒に書いてあげて下さい。
|
サンプル 各マウスボタンを押したカウント数、ホイール回転数、マウスポインタのある座標が表示されます。 #include "DxLib.h" typedef struct{ int x; int y; //座標 int WheelRotVol;//ホイールの回転量 unsigned int Button[8]; //ボタンの押した状態 }Mouse_t; Mouse_t Mouse; int GetHitMouseStateAll_2(Mouse_t *Nezumi){ if(GetMousePoint( &Nezumi->x, &Nezumi->y ) == -1){ //マウスの位置取得 return -1; } int MouseInput=GetMouseInput(); //マウスの押した状態取得 for(int i=0; i<8; i++){ //マウスのキーは最大8個まで確認出来る if( (MouseInput & 1<<i ) != 0 ) Nezumi->Button[i]++; //押されていたらカウントアップ else Nezumi->Button[i] = 0; //押されてなかったら0 } Nezumi->WheelRotVol = GetMouseWheelRotVol() ; //ホイール回転量取得 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;//初期化と裏画面化 SetMouseDispFlag( TRUE ) ;//マウス表示オン int White = GetColor(255,255,255); while(ProcessMessage()==0 && ClearDrawScreen()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){ //↑メッセージ処理 ↑画面をクリア ↑ESCが押されていない GetHitMouseStateAll_2(&Mouse); //マウスの入力状態取得 DrawFormatString(0,0,White,"座標[%d,%d],回転量:%d,",Mouse.x,Mouse.y,Mouse.WheelRotVol); for(int i=0; i<8; i++){ DrawFormatString(0, 20+20*i, White, "ボタン%d:%u", i, Mouse.Button[i]); } ScreenFlip(); } DxLib_End(); return 0; } 実行結果 |
- Remical Soft -