3

大学のターム プロジェクトでは、アイソメ ディスプレイを使用するグラフィカルなローグライク ゲームに取り組んでいます (用語の矛盾を認識しています:P)。私が理解しようとしているのは、すべてのタイルを描画するのはばかげて高価で不要であるため、どのタイルを描画して NxMpx ウィンドウ内に収まるようにするかを決定する比較的高速なアルゴリズムを見つけたいということです。グラフィックは XxYpx です。

私はこれのためにスムーズスクロールをしていないので、それは問題ではありません. また、完璧であることを心配していません。少し不必要なドローは問題ありません。ゲーム内に表示されない不要なタイルを大量にドローしたくないだけです。

4

1 に答える 1

4

画面空間とワールド空間という 2 つの概念について考える必要があります。これらは 3D エンジンでは非常に重要ですが、非常に単純なゲームを除くすべてのゲームに当てはまります。アイソメトリック エンジンでは、ワールド空間はタイルの 2D 配列です。

したがって、まず最初に、これら 2 つの座標空間の間を移動する方法を検討しています。これが完了すると、画面空間が 45 度回転した長方形として世界にマップされることが明らかになります。その式を決定することはできますが、世界空間のどの部分が見えるかを決定しようとしている場合にのみ重要なので、その領域のモンスターのみをシミュレートします (8 ビット コンソールでは必要な効率であり、おそらく最新の PC では必要ありません! )。実際のレンダリングに関しては、世界のこの可視領域を実際に決定する必要はありません。これは、タイルを画面にレンダリングする方法で暗黙的であるためです。

  1. 画面の左上にあるタイルの位置を特定し、これを O (原点) と呼びます。これは、関心のあるポイント (通常はプレイヤー) からの固定オフセットになり、中心に保持したいものになります。スクリーン。
  2. それができたら、画面の一番上の行にタイルをペイントし、タイルごとにワールド空間で +1X と -1Y をステップします (北東を向いている場合)。
  3. 次に、下の行をペイントします。これは、画面空間でタイル幅の半分を差し引いたオフセットであり、ワールド空間で O -1X から始まります。
  4. 手順 2 と 3 を繰り返し、画面の上部に到達するまで、前の段階 2 で使用したものから X と Y で -1 だけワールド空間の開始位置を変更します。

その他のヒント:-

  • 明らかに、マップの外側にあるタイルは描画しません。また、ゲームのデザインによっては、プレイヤーがいる特定の部屋の外にタイルを描かないこともあります。
  • 描画する床タイルだけでなく、プレイヤー、モンスター、シナリオなどもあります。ルールは、同じパス内の特定の世界の場所にあるすべてのものを描画することです。そうすれば、「カメラ」に最も近いオブジェクトがその背後にあるものを覆い隠します (これが、画面の上部から描画を開始する理由です)。
  • また、ほとんどの iso エンジンにはフロア タイルだけでなく、家具や壁のセグメントもあります。マップの領域を特定の部屋に属するものとして指定する場合があります。フォーカスがその部屋にある場合 (たとえば、プレーヤーがその部屋にいるため)、カメラに最も近い部屋の側面の壁セグメントを描画しません。 .

とにかく、それで十分です。それが役に立ち、プロジェクトがうまくいくことを願っています。

于 2010-01-14T12:05:32.940 に答える