



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 -