重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

VC++2010&DXライブラリを使用してタクティクスオウガやモナークモナークのようなSLGをふと作りたくなり、クォータービューを採用しました。

全くの平面な状態ですと、それぞれのブロックチップのひし形の4つの座標を、それぞれ通る4本の一次関数式と現在のマウスカーソル位置との範囲内計算をさせることで、カーソルがあたっている部分だけ色を変えるという処理(ゲーム内カーソルの表示)をさせる処理は上手くいきました。
また、ひし形の頂点の座標をCreatePolygonRgn();とPtInRegion();を使う処理に変えてみても大丈夫でした。
しかし添付しました画像のようにマップに高さの概念を加えていくと、ひし形が重なり合う部分が出てきてしまい、画像のように
青の部分にマウスカーソルが入るとAとBが選択されて色が変わった状態になり、
緑の部分にマウスカーソルが入るとCとBが選択されて色が変わった状態になり、
赤の部分にマウスカーソルが入るとDとBが選択されて色が変わった状態になってしまいます。
(いずれの場合も、一番手前にあるBの面だけが選択され、色が変わった状態になってほしい、
というのが理想としている動きです)

CreatePolygonRgn();も使えるので、例えばこの画像のような例ですとAは変形六角形、CとDは変形五角形として扱うこともできそうですが、常にこういった高さの違うマップだけを表示する、というわけではなく、ブロックによっては高さが任意に変わってしまうため、変形多角形のパターンも多岐になるであろうことが予測できてしまい、目の前が真っ暗になってしまっております。
こういった場合のマウスカーソルの当り判定につきまして、何か良い処理方法をご存知の方がいらっしゃいましたら何卒お教えくださいますようお願いします。

「高さのあるクォータービューの当り判定につ」の質問画像

A 回答 (1件)

難しく考えずに複数の面が該当したらいちばんZが近い(カメラが近い)ものを選択すれば良いのでは?

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
3D処理ではなく、2D処理でのお話だったのですが、「いちばんZが近いものを選択」というのがヒントになり、解決しました。

今まで最も奥のX軸Y軸[0,0]からインクリメントでループを回してチェックをかけていたのを、逆のX軸Y軸共に最大軸からデクリメントでループを回してリージョン内マウスポインタチェックをかけることで想定していた結果を得ることができました。

お礼日時:2012/07/22 17:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!