ボタンの処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
にこよん
記事: 113
登録日時: 7年前
住所: 大阪府
連絡を取る:

ボタンの処理について

#1

投稿記事 by にこよん » 6年前

こんばんは
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;
}
また関数では複数のボタンを設置した場合どのボタンに対しクリックされていたのかが分からないのでクラスなどを使って
関数を作ればいいのかなと思っているのですが、具体的な方法がおもいつきません
最近は東方風アクションゲームを少しずつ作ってる人です
東方翠風燐FreeDownload⇒http://dxlib.o.oo7.jp/cgi/patio/read.cgi?no=212

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

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

#2

投稿記事 by Dixq (管理人) » 6年前

ボタンの作り方はこちらで紹介しているので参考にどうぞ
http://dixq.net/g/s_03.html

アバター
にこよん
記事: 113
登録日時: 7年前
住所: 大阪府
連絡を取る:

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

#3

投稿記事 by にこよん » 6年前

素早い回答ありがとうございました
拝見させていただきます
最近は東方風アクションゲームを少しずつ作ってる人です
東方翠風燐FreeDownload⇒http://dxlib.o.oo7.jp/cgi/patio/read.cgi?no=212

アバター
にこよん
記事: 113
登録日時: 7年前
住所: 大阪府
連絡を取る:

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

#4

投稿記事 by にこよん » 6年前

頂いた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で動かすことはできませんか?
最近は東方風アクションゲームを少しずつ作ってる人です
東方翠風燐FreeDownload⇒http://dxlib.o.oo7.jp/cgi/patio/read.cgi?no=212

アバター
にこよん
記事: 113
登録日時: 7年前
住所: 大阪府
連絡を取る:

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

#5

投稿記事 by にこよん » 6年前

何とかなりました

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

ありがとうございました
最近は東方風アクションゲームを少しずつ作ってる人です
東方翠風燐FreeDownload⇒http://dxlib.o.oo7.jp/cgi/patio/read.cgi?no=212

返信

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