高さのあるクォータービューの当り判定について
VC++2010&DXライブラリを使用してタクティクスオウガやモナークモナークのようなSLGをふと作りたくなり、クォータービューを採用しました。
全くの平面な状態ですと、それぞれのブロックチップのひし形の4つの座標を、それぞれ通る4本の一次関数式と現在のマウスカーソル位置との範囲内計算をさせることで、カーソルがあたっている部分だけ色を変えるという処理(ゲーム内カーソルの表示)をさせる処理は上手くいきました。
また、ひし形の頂点の座標をCreatePolygonRgn();とPtInRegion();を使う処理に変えてみても大丈夫でした。
しかし添付しました画像のようにマップに高さの概念を加えていくと、ひし形が重なり合う部分が出てきてしまい、画像のように
青の部分にマウスカーソルが入るとAとBが選択されて色が変わった状態になり、
緑の部分にマウスカーソルが入るとCとBが選択されて色が変わった状態になり、
赤の部分にマウスカーソルが入るとDとBが選択されて色が変わった状態になってしまいます。
(いずれの場合も、一番手前にあるBの面だけが選択され、色が変わった状態になってほしい、
というのが理想としている動きです)
CreatePolygonRgn();も使えるので、例えばこの画像のような例ですとAは変形六角形、CとDは変形五角形として扱うこともできそうですが、常にこういった高さの違うマップだけを表示する、というわけではなく、ブロックによっては高さが任意に変わってしまうため、変形多角形のパターンも多岐になるであろうことが予測できてしまい、目の前が真っ暗になってしまっております。
こういった場合のマウスカーソルの当り判定につきまして、何か良い処理方法をご存知の方がいらっしゃいましたら何卒お教えくださいますようお願いします。
お礼
パワースポイトを早速ダウンロードしました。私が希望していたソフトです。助かりました。ありがとうございました。