マウスの入力状態取得について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
総統

マウスの入力状態取得について

#1

投稿記事 by 総統 » 13年前

現在,DXライブラリで15パズルを制作しています.

マウスで左クリックされたところのピースを動かすという処理を行いたいのですが,
左クリックをするとチャタリング?が発生し,一回クリックしたつもりでも10回クリックしたことになってしまいます.
このため,ピースの交換が高速で何回も行われ,ちらつきが起きます.
左クリックがされたら一回だけカウントしたいのですがどうすればよいでしょうか.
宜しくお願いします.
以下はマウスの入力チェックを行い,15枚のピースのどこが選択されたかを調べる関数です.

コード:

int MousePointCheck(void){
	int MouseX,MouseY;
	static int MouseXbuf,MouseYbuf;
	static int MousePlace;

	//マウスの座標取得
	GetMousePoint(&MouseX,&MouseY);

	//左ボタンが押されたら
	if( GetMouseInput() && MOUSE_INPUT_LEFT){

		//どこの列か X
		if(MouseX>0 && MouseX<=120) MouseXbuf=0;
		if(MouseX>120 && MouseX<=240) MouseXbuf=1;
		if(MouseX>240 && MouseX<=360) MouseXbuf=2;
		if(MouseX>360 && MouseX<=480) MouseXbuf=3;

		//どこの行か Y
		if(MouseY>0 && MouseY<=120) MouseYbuf=0;
		if(MouseY>120 && MouseY<=240) MouseYbuf=1;
		if(MouseY>240 && MouseY<=360) MouseYbuf=2;
		if(MouseY>360 && MouseY<=480) MouseYbuf=3;

		//上記からどのピースがクリックされたか判断
		MousePlace=MouseXbuf+4*MouseYbuf;

		//クリックされたピース番号を返す
		return MousePlace;

	}

	//クリックされなかった場合
	else return -1;

}


アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: マウスの入力状態取得について

#2

投稿記事 by h2so5 » 13年前

GetMouseInput()はクリックされたかどうかではなくボタンが押されているかどうかの状態を返すので、
前回の入力状態を記録しておいて、クリックされたのかずっと押し続けているのか判断する必要があります。
チャタリングではありません。

nil
記事: 428
登録日時: 14年前

Re: マウスの入力状態取得について

#3

投稿記事 by nil » 13年前

コード:

        if(MouseX>0 && MouseX<=120) MouseXbuf=0;
        if(MouseX>120 && MouseX<=240) MouseXbuf=1;
        if(MouseX>240 && MouseX<=360) MouseXbuf=2;
        if(MouseX>360 && MouseX<=480) MouseXbuf=3;
 
        //どこの行か Y
        if(MouseY>0 && MouseY<=120) MouseYbuf=0;
        if(MouseY>120 && MouseY<=240) MouseYbuf=1;
        if(MouseY>240 && MouseY<=360) MouseYbuf=2;
        if(MouseY>360 && MouseY<=480) MouseYbuf=3;
これらは
MouseXbuf = MouseX/120;
で簡略化できますね。

マウスの入力についてはここを参考になさると良いです。

総統

Re: マウスの入力状態取得について

#4

投稿記事 by 総統 » 13年前

ありがとうございました.
解決できました.

アバター
asd
記事: 319
登録日時: 15年前

Re: マウスの入力状態取得について

#5

投稿記事 by asd » 13年前

総統 さんが書きました:ありがとうございました.
解決できました.
どうやって解決したのか、解決後のソースを提示していただけないでしょうか?
このフォーラムではフォーラムルールにあるとおり、解決後にはどのように解決したかを明示することになっています。

http://dixq.net/board/board.html
---以下、フォーラムルールから引用
また、解決した時は、「解決しました」とだけ言って去らず、ソースコードや解決した方法を明記して下さい。

同じ事で困っている人の為に過去ログに有用な情報を残すようお願いします。
Advanced Supporting Developer
無理やりこじつけ(ぉ

閉鎖

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