ページ 11

レイ

Posted: 2012年7月03日(火) 13:31
by ヘクスマップにマウスオーバーした時の判断
DXライブラリを使用して2Dゲームを製作しています。

この度、ボードゲームの様なものを製作しているのですが、
六角形のマスを並べた盤を使用することになりました。
(六角形のマスの盤は調べたところへクスマップというのを知りました。)

このヘクスマップを使用してプログラミングをするのは初めてで、
色々と試行錯誤して製作しているのですが、
とても大きな壁に当たってしまったので質問させて下さい。

このゲームの操作は全てマウスで行うのですが、
あるひとつのマスの上にマウスポインタが重なった事を判断する方法が思いつきません。

矩形のマスであればマウスの座標が、マスの左上の座標(x1、y1)と右下の座標(x2、y2)の間にあるかを判断すればいいと思いますが、
六角形の様に斜辺が存在する形の座標をどう扱えばいいのかわかりません。

もし、いい方法があればご教授ください。

以上、よろしくお願いします。

Re: レイ

Posted: 2012年7月03日(火) 13:57
by h2so5
6角形は3角形の集合なので3角形と点の当たり判定が分かればいいわけです。
3角形と点の当たり判定についてはネット上にいくつか解説がありますので、調べてみてください。

Re: レイ

Posted: 2012年7月03日(火) 18:51
by かば
自分の考えでは、ヘクスマップであっても、左上座標が基本かと思います。
マップチップを配列するのでしたら、やはり左上座標を基準として考えないといけないと思うからです。
1画面で収まるもの(オセロや将棋、囲碁、その他)のようなものであれば、必要なくてもできるかと思いますが、
やはり、スクロールなどを考えると、左上座標は必要かと思います。

ヘクスマップアは、4角形のマップを千鳥配置したものと同じ考えだと思うので、
各マップチップの配置や、マウス座標がどのマップ位置上にあるか、を知るには
左上座標を基準として、48×48のチップだとして、その中に6角形を描けば
おのずと、当たり判定内外の座標が計算できます。
その座標+左上座標をすればよいと思います。
とすれば、ふつうのRPGと同じ要領のマップ配列に偶数行を表示するときにx座標に+24して表示していけば
千鳥配列となり、y座標は行数×32-16とすればヘクスマップの表示にあうのではないでしょうか。

当たり判定の制度がどの程度必要かは知りませんが、円や程よい四角形でもよければ
左上座標+24(x座標、y座標)で中心をだし、半径としてやればよいのかなっと思います。