質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

4回答

4169閲覧

C++(DXライブラリ)で画像を使ったボタン作成

kixi

総合スコア10

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2019/02/17 21:10

C++(DXライブラリ)で画像を使ったボタン作成

画像の上をクリックすると次の画面へ変わるようなボタンを作りたいと思っています。
調べているとリンク内容 このページの2つ目の回答(Dixq (管理人)さんの回答)がとても納得できたのでボタンの位置を色で分けて判断させようとしました
イメージ説明
(↑の丸の上にボタンの画像を貼り付ける予定です)
色々と試行錯誤してみましたがうまく動作することが出来ずお手上げ状態です。回答よろしくおねがいします。
また、もっと良いボタンの作り方などがありましたら教えてくださると嬉しいです。

発生している問題

GetPixelSoftImage(MenuMap, MouseX, MouseY, &r, &g, &b, &a);
でr,g,b,aの値が変わらず、初期値のままになってしまう

printfDx("%x ", RED_ColorCode); 
などでColorCodeと付いている変数の数値を確認したところすべて先頭にFFがついていた(完全な透明?)

該当のソースコード

C++,DXライブラリ

1 int MouseX, MouseY, Mouse = GetMouseInput(); 2 int r=0, g=0, b=0, a=0; 3 int MenuMap = LoadSoftImage("picture/MenuMap.png"); 4 if (Mouse & MOUSE_INPUT_LEFT != 0) { 5 DrawGraph(0, 0, MenuMap, FALSE); //丸の位置確認のため表示 6 GetMousePoint(&MouseX, &MouseY); 7 GetPixelSoftImage(MenuMap, MouseX, MouseY, &r, &g, &b, &a); 8 int Click_ColorCode = GetColor(r, g, b); 9 int RED_ColorCode = GetColor(255, 0, 0); 10 int GREEN_ColorCode = GetColor(0, 255, 0); 11 int BLUE_ColorCode = GetColor(0, 0, 255); 12 13 if (Click_ColorCode == RED_ColorCode) 14 SceneMgr_ChangeScene(eScene_Start);//画面移動 15 if (Click_ColorCode == GREEN_ColorCode) 16 SceneMgr_ChangeScene(eScene_Config);//画面移動 17 if (Click_ColorCode == BLUE_ColorCode) 18 SceneMgr_ChangeScene(eScene_Buy);//画面移動 19 }

試したこと

GetPixelやGetColorなどでクリック時のマウスの座標の色と丸の色の一致を判断する

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

printfDx("%x ", RED_ColorCode); 
などでColorCodeと付いている変数の数値を確認したところすべて先頭にFFがついていた

基本的にARGBで処理しているように見えました。A = FFということは不透明ですね。

GetPixelやGetColorなどでクリック時のマウスの座標の色と丸の色の一致を判断する

画面バッファを取得するとできるような気がしますね。

投稿2019/02/18 01:09

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

デバッグで確認してみたところGetPixelSoftImageの色に関する値が代入されていませんでした
リファレンスを見ているとLoadSoftImageではなくLoadARGB8ColorSoftImageを使っているサンプルがあったためそちらに変えてみたら動作し、ボタンを作ることが出来ました
皆さん回答ありがとうございました

投稿2019/02/19 05:49

kixi

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそもその場合の円、アンチエイリアスかけられないのでギザギザ感が強くなっていまいますから素直に図形との当たり判定を考えたほうがいいと思いますが・・・

投稿2019/02/18 06:48

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stdio

2019/02/18 06:54

確かにめんどくさい方法使ってますからね... しかし、図形が変わると当たり判定も変わるので、いちいち形に囚われたくないのであれば有効な手段ではあるんですよね...
guest

0

GetPixelSoftImage の引数に渡す座標は画像「MenuMap」上の座標なので、おそらく意図した座標を指定できていないのではないかと思います。

意図した座標を渡せているかデバッグして確認してください。

GetPixelSoftImage の使い方は、リファレンスのサンプル を参考にしていただくと理解しやすいと思います。

また、もっと良いボタンの作り方などがありましたら教えてくださると嬉しいです。

ボタンの形状を定義して当たり判定を取るというのが、一般的によく使われていると思います。

参考:s3章. Androidのようなボタンを作成する(C++)

投稿2019/02/17 23:22

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問