ページ 11

関数をマウス1クリックにつき一回だけ呼び出したい。

Posted: 2012年10月02日(火) 23:44
by Cr
今ダイアモンドゲームと言うボードゲームを実装中なのですが、
マウスがクリックされた時に呼び出し、どの場所がクリックされたか保存、二回目以降ならその場所にコマを移動させる事が出来るか判定する関数を呼び出し、移動可能なら移動させるという関数を作りました。

そこでこの関数(RespondToMouose)をマウスが一回クリックされたときに一回だけ呼び出したいです。
ところが

コード:

while(1){
               Mouse = GetMouseInput();
               if( Mouse & MOUSE_INPUT_LEFT ){
					RespondToMouse();
				}
}
と書いたところ、マウスが押されている間何回もその関数を呼び出してしまい、誤作動を起こしてしまいました。
マウスが長い間押され続けていても一回のみその関数を呼び出したいときはどのように書けばいいでしょうか?

Re: 関数をマウス1クリックにつき一回だけ呼び出したい。

Posted: 2012年10月02日(火) 23:56
by softya(ソフト屋)
ゲームプログラミンの館にあるキーボードと同じ処理を実装すればよいかと思います。

Re: 関数をマウス1クリックにつき一回だけ呼び出したい。

Posted: 2012年10月02日(火) 23:57
by tk-xleader
このようにして、ひとつ前の状態を保存する変数を用意して、ひとつ前のコマで押されていなければ、RespondToMouseを呼び出すようにすればどうでしょう?

コード:

while(1){
               Mouse = GetMouseInput();
               if( (Mouse & MOUSE_INPUT_LEFT) && !(prevMouse & MOUSE_INPUT_LEFT) ){
                    RespondToMouse();
                }
               prevMouse = Mouse;
}

Re: 関数をマウス1クリックにつき一回だけ呼び出したい。

Posted: 2012年10月03日(水) 00:08
by Cr
>softyaさん

コード:

int Mouse;
int Click = 0;
while(1){
               if(Mouse & MOUSE_INPUT_LEFT)
					Click++;
				else
					Click = 0;
				if(Click == 1)
					RespondToMouse();
}
これでやりたい動きができました!ありがとうございました。

>tk-xleaderさん
こちらも正常に動きました。
どうもありがとうございました。

Re: 関数をマウス1クリックにつき一回だけ呼び出したい。

Posted: 2012年10月04日(木) 17:10
by ISLe
tk-xleaderさんのコードですが、

コード:

    Mouse = GetMouseInput();
    if (Mouse ^ prevMouse & Mouse & MOUSE_INPUT_LEFT) {
        RespondToMouse();
    }
    prevMouse = Mouse;
と書くことができます。
ちなみに

コード:

    Mouse = GetMouseInput();
    if (Mouse ^ prevMouse & prevMouse & MOUSE_INPUT_LEFT) {
        RespondToMouse();
    }
    prevMouse = Mouse;
だとボタンが離されたときになります。