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

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

ただいまの
回答率

87.61%

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

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 1,826

score 10

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

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

発生している問題

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

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

該当のソースコード

    int MouseX, MouseY, Mouse = GetMouseInput();
    int r=0, g=0, b=0, a=0;
    int MenuMap = LoadSoftImage("picture/MenuMap.png");
    if (Mouse & MOUSE_INPUT_LEFT != 0) {
        DrawGraph(0, 0, MenuMap, FALSE); //丸の位置確認のため表示
        GetMousePoint(&MouseX, &MouseY);
        GetPixelSoftImage(MenuMap, MouseX, MouseY, &r, &g, &b, &a);
        int Click_ColorCode = GetColor(r, g, b);
        int RED_ColorCode = GetColor(255, 0, 0);
        int GREEN_ColorCode = GetColor(0, 255, 0);
        int BLUE_ColorCode = GetColor(0, 0, 255);

        if (Click_ColorCode == RED_ColorCode)
            SceneMgr_ChangeScene(eScene_Start);//画面移動
        if (Click_ColorCode == GREEN_ColorCode)
            SceneMgr_ChangeScene(eScene_Config);//画面移動
        if (Click_ColorCode == BLUE_ColorCode)
            SceneMgr_ChangeScene(eScene_Buy);//画面移動
    }

試したこと

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

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+2

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/18 15:54

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

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る