タイルベースのゲームで隠されていないタイルを見つける


9

私は2Dタイルベースのゲームに取り組んでおり、現在、2D相当のシャドウボリュームを機能させることを試みています。影を落とすべき表面を見つけられません。ゲームのどの時点からでも、隠されていない顔、またはタイル全体を見つける必要があります。

私の質問は、ポイントを与えられた場合、これらのタイル/エッジをできるだけ速く見つけるにはどうすればよいですか?

一般的な見通し線と影響を受けるタイルを示す画像

回答:



2

これは完全な答えではありませんが、うまくいけば役立つでしょう。

マップ/タイルは静的または動的に設定されていますか?静的な場合は、オフライン処理を実行し、そのようにできる限り事前計算することを強くお勧めします。好きなように(レイキャスティングやもっと賢い方法で)できますが、レベルを「ベイク」している間はすべてオフラインで行われるため、非常に高速に作成する必要はありません。各スポットから見えるタイルを正確に事前計算するか、ある種の大きな領域と各領域から見える可能性のあるすべてのタイルを作成することができます。

次に、実行時に、表示されているタイルのクエリは非常に単純で非常に高速でなければなりません。

もちろん、動的に作成されたレベルがある場合、これはまったく適用されません:-)


1

これをC#のローグライクに実装した方法をこちらで確認できます。コードは高度に最適化されていませんが、私にとっては十分高速であり、(さらに重要なことに)かなり読みやすいはずです。基本的には、一度に1つのオクタントで機能する単純なシャドウキャストアルゴリズムを実行しています。


0

使用しているプラ​​ットフォームはわかりませんが、(多くのemがない限り)ライトキャストエンティティの周りに円を成長させて、サークルアルゴリズムで「プロット」されようとしているタイルは、塗りつぶされたタイルであり、したがって遮光されます。そこから、オクルードされているかされていないサークルセグメントを追跡する必要があるため、少しトリッキーになりますが、それは私が行うことです。別のオプションは、タイルの解像度空間で(やはりかなり高速に)円にレイをキャストし、各レイが固体タイルに当たったときに停止することです。


ええと、私は主にFlashとJavascriptのゲームをやっていますが、現在のところ、少し力を尽くし始める一種のブルートフォースメソッドを行っています。最適化の方法がわかれば、このゲームをかなりスムーズに実行できます。
Ryan S

フラッシュで簡単に実行できるはずです。おそらく、ブルートフォースを最適化できるでしょう。また、一般に、フレームごとに更新する必要はないため、いくつかのフレームで次の状況を事前に計算できます
Kaj
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.