図のようにマップを格子状に区切って自分の大まかな位置を取得したいと思っています。
黒丸が自機、赤丸がMOB、青丸がNPCです。
視野サイズは格子と同じサイズとします。つまり、仮に格子11のちょうど真ん中にキャラがいた場合格子11内しか見えませんが、図のような場合は中心よりも若干格子16よりなので、格子12,15,16の一部が見えるという状況です。
今回の場合ですと、格子11内のMOB全部と格子12,15のMOBが視野内にあり、残りは見えません。
キャラが格子10に進むと徐々に格子11内のMOBは格子12よりのMOBから見えなくなり、逆に格子10のMOBやNPCが見えてくるはずです。
お聞きしたいのは
NPCやMOBを描画する際、見えない位置にいるのを描画しても意味ないので、格子番号を取得して周りの格子(図のような場合であれば格子6,7,8,10,12,14,15,16)を描画するようにしたいのですが
いい方法はないでしょうか?件名の通り3Dマップです。
3DRPGマップの位置判定の仕方
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 3DRPGマップの位置判定の仕方
格子のバウンダリ(境界)・ボックスを作って、その4頂点のどれから座標が視野角内に入っているかで表示ON/OFFを決めたほうが良いでしょう。
バウンダリ(境界)・ボックスの座標と当たり判定すればキャラ達は、どの格子に属しているか知ることが出来ます。
バウンダリ(境界)・ボックスの座標と当たり判定すればキャラ達は、どの格子に属しているか知ることが出来ます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 3DRPGマップの位置判定の仕方
単純に格子状に地形モデルも含めて区切れるのであれば、100で割るとか単純な計算で出来ますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 3DRPGマップの位置判定の仕方
第一歩としては、座標と格子番号の対応表を用意することでしょうか。
3Dマップということなので、高さ方向にも格子があるのか、それとも3Dマップだけれども平面的にしか
格子分割されていないのかわかりませんが、ここでは3次元座標系を仮定します。2次元座標系でも同じ考えでいけます。
まず単純な方法としては、x,y,zに対応する3次元配列を用意し、各要素へ格子番号を格納していく方法があります。
grid_indices[z][y][x] = 格子番号
のように、すべての配列要素に格子番号を割り振っておきます。
そして、自機が(x0,y0,z0)にいるときに描画する際には、
grid_indices[x0-1][y0-1][z0-1]~grid_indices[x0+1][y0+1][z0+1]
で格子番号を取得し、その格子を描画すればいいでしょう。
次に3次元配列を使わず、格子座標から格子番号を求めるやり方もあるでしょう。
格子番号の振り方が規則的なら、計算で格子座標から格子番号を求められるはずです。
3Dマップということなので、高さ方向にも格子があるのか、それとも3Dマップだけれども平面的にしか
格子分割されていないのかわかりませんが、ここでは3次元座標系を仮定します。2次元座標系でも同じ考えでいけます。
まず単純な方法としては、x,y,zに対応する3次元配列を用意し、各要素へ格子番号を格納していく方法があります。
grid_indices[z][y][x] = 格子番号
のように、すべての配列要素に格子番号を割り振っておきます。
そして、自機が(x0,y0,z0)にいるときに描画する際には、
grid_indices[x0-1][y0-1][z0-1]~grid_indices[x0+1][y0+1][z0+1]
で格子番号を取得し、その格子を描画すればいいでしょう。
次に3次元配列を使わず、格子座標から格子番号を求めるやり方もあるでしょう。
格子番号の振り方が規則的なら、計算で格子座標から格子番号を求められるはずです。
Re: 3DRPGマップの位置判定の仕方
平面的にしか格子分割しないつもりでした。
beatleさんの方法でやってみようと思います。
分からなくなったら softya(ソフト屋)さんのバウンダリ・ボックスの方法に切り替えるかもしれませんが・・・・・・
beatleさんの方法でやってみようと思います。
分からなくなったら softya(ソフト屋)さんのバウンダリ・ボックスの方法に切り替えるかもしれませんが・・・・・・
Re: 3DRPGマップの位置判定の仕方
おおまかな格子状って、本当に必要なのですか?
マップのスクロールのためなら必要かもしれないけど、視野範囲のためなら、いらないのでは?
だって、ちょうど中心じゃない場合は隣接した部分も描画するんでしょ。
問題は視野範囲を地形効果がない場合に自機からの距離で円(or球)で考えるか、四角で考えるかではないのですか?
マップのスクロールのためなら必要かもしれないけど、視野範囲のためなら、いらないのでは?
だって、ちょうど中心じゃない場合は隣接した部分も描画するんでしょ。
問題は視野範囲を地形効果がない場合に自機からの距離で円(or球)で考えるか、四角で考えるかではないのですか?
non