ページ 11

ボタンの処理について

Posted: 2017年12月23日(土) 21:32
by にこよん
こんばんは
visual C++(DXライブラリ)で作成中のゲームのマウスでクリックするタイプのボタンの処理が思いつかないのでご教授してほしいです

クリック(マウスのボタンを押した瞬間)に反応するタイプのものではなく
クリックした後(マウスのボタンを押して離した瞬間)に反応するものを作りたいと考えています
全ての使用を説明すると大変なのですがよくゲームに使われている方法です
ボタンをクリックしてもボタンから離れた場所までカーソルを移動してからクリックを解除すればもちろん反応しませんし
ボタンとは関係ない場所でクリックし、ボタンの上までカーソルを移動し、クリックを解除した場合も反応してはいけません

以下の様な関数を作成したのですがこれだとボタンをクリックした瞬間に反応してしまいます

コード:

//指定された場所がマウスでクリックされたかどうかチェックする (0 接触なし、1 接触開始、2 接触中、3 クリック開始、4 クリック中
int ClickBox(int x1, int y1, int x2, int y2, int draw_color) {
	if (draw_color != 0) DrawBox_(x1, y1, x2, y2, draw_color, FALSE);

	if (mouse_x >= x1 && mouse_x <= x2 && mouse_y >= y1 && mouse_y <= y2) {
		if (draw_color != 0) DrawBox_(x1, y1, x2, y2, col.p_blue, FALSE);
		if (mouse_xx < x1 || mouse_xx > x2 || mouse_yy < y1 || mouse_yy > y2) return 1;
		if (GetMouse(MOUSE_LEFT) == 1) return 3;		//クリック開始
		if (GetMouse(MOUSE_LEFT) > 1) return 4;			//クリック中
		return 2;										//接触中
	}
	return 0;
}
また関数では複数のボタンを設置した場合どのボタンに対しクリックされていたのかが分からないのでクラスなどを使って
関数を作ればいいのかなと思っているのですが、具体的な方法がおもいつきません

Re: ボタンの処理について

Posted: 2017年12月23日(土) 22:16
by Dixq (管理人)
ボタンの作り方はこちらで紹介しているので参考にどうぞ
http://dixq.net/g/s_03.html

Re: ボタンの処理について

Posted: 2017年12月23日(土) 22:37
by にこよん
素早い回答ありがとうございました
拝見させていただきます

Re: ボタンの処理について

Posted: 2017年12月23日(土) 22:45
by にこよん
頂いたURLの先のサイトのプロジェクト一式をダウンロードしたのですが動かないです

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー LNK2019 未解決の外部シンボル _sscanf が関数 _jinit_memory_mgr で参照されました。 DxLib C:\Users\\Downloads\Button\Button\libjpeg_d.lib(jmemmgr.obj) 1
エラー LNK2019 未解決の外部シンボル _vsprintf が関数 "int __cdecl DxLib::_VSPRINTF(char *,char const *,char *)" (?_VSPRINTF@DxLib@@YAHPADPBD0@Z) で参照されました。 DxLib C:\Users\\Downloads\Button\Button\DxLib_d.lib(DxBaseFunc.obj)
エラー LNK2001 外部シンボル "_sprintf" は未解決です。 DxLib C:\Users\
エラー LNK2001 外部シンボル "_sprintf" は未解決です。 DxLib C:\Users\\Downloads\Button\Button\libjpeg_d.lib(jerror.obj) 1

上の様なエラーが出てしまいます
2017で動かすことはできませんか?

Re: ボタンの処理について

Posted: 2017年12月24日(日) 17:36
by にこよん
何とかなりました

おかげさまで想像してたようなボタンを作成することができました
マウスがクリックされていない時間をカウントすればいいのですか...思いつきませんでした

ありがとうございました