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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
Cr
記事: 93
登録日時: 8年前

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

#1

投稿記事 by Cr » 7年前

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

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

コード:

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 7年前

ゲームプログラミンの館にあるキーボードと同じ処理を実装すればよいかと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
tk-xleader
記事: 153
登録日時: 9年前
連絡を取る:

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

#3

投稿記事 by tk-xleader » 7年前

このようにして、ひとつ前の状態を保存する変数を用意して、ひとつ前のコマで押されていなければ、RespondToMouseを呼び出すようにすればどうでしょう?

コード:

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

アバター
Cr
記事: 93
登録日時: 8年前

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

#4

投稿記事 by Cr » 7年前

>softyaさん

コード:

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

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

ISLe
記事: 2648
登録日時: 9年前
連絡を取る:

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

#5

投稿記事 by ISLe » 7年前

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;
だとボタンが離されたときになります。

閉鎖

“C言語何でも質問掲示板” へ戻る