1

私はここ数ヶ月、2次元のタイルベースのゲームを作成するさまざまな方法を試してきました。私は常に、各タイルを「タイル」クラスの個別のオブジェクトにしました。タイルオブジェクトは、オブジェクトの2次元配列に格納されます。これは、多くのタイルが一度にレンダリングされるパフォーマンスの観点から、非常に非現実的であることが証明されています。レンダリングされるプレーヤーから一定の距離内にあるタイルのみを許可することでこれを支援しましたが、これもそれほど素晴らしいことではありません。また、ゲーム内でタイルの値を編集しようとすると、オブジェクトがnullポインター例外を返すという問題が発生しました。これは、2D配列内のオブジェクトが適切に初期化されていないことに関係しています。

これを行う他のもっと簡単な方法はありますか?すべてのタイルベースのゲームがこの正確な方法を使用しているとは想像できません。何かを見落としているに違いありません。

編集:おそらくLWJGLは使用する正しいライブラリではありませんか?LWJGLでフォントシステムを実装する際にも同様の問題が発生します...1文より多く入力すると、FPSが100以上低下します。

4

2 に答える 2

2

静的オブジェクト (どこにも行かず、その場にとどまる) の場合、1 タイル = 1 オブジェクトで問題ありません。それがWolf3dで行われた方法です。オブジェクトを移動するには、複数のオプションがあります。

オブジェクトが 1 つだけに完全に含まれておらず、1 つまたは複数のセル/タイルの境界をまたいでいる場合、本当に必要な場合は、オブジェクトのサブパーツを隣接するセル/タイルに格納できます。ただし、オブジェクトをその場でパーツに分割する必要があるため、これはあまり便利ではないかもしれません。

より合理的なアプローチは、移動オブジェクトをセル/タイルにまったく格納せず、静的オブジェクトとはほぼ独立して処理することです。ただし、オブジェクトの可視性を判断するためのコードが必要になります。実際、グラフィックスにおける最も基本的なパフォーマンスの問題は、不要な計算とレンダリングに起因します。通常、目に見えないものをレンダリングしようとさえしたくありません。同様に、一部の計算 (特に複雑な計算) を最も内側のループの外に移動できる場合は、移動する必要があります。

それ以外は、何をしているのか、どのようにしているのか、実際のコードを見ているのかについての詳細がほとんどないため、特定のアドバイスを与えることはかなり困難です。質問を具体的にするように努めるべきです。

于 2012-07-09T09:06:58.450 に答える
1

Tile オブジェクトの 2 次元配列で問題ありません.... これは、ほとんどの 2D ゲームで使用されるものであり、OpenGL / LWJGL から十分なパフォーマンスを得て、これを適切な速度でレンダリングできるはずです ( 100FPS+)。

確認事項:

  • 表示されているタイルのセットのみを表示するようにクリッピングしていることを確認してください (画面の幅と高さ、およびプレーヤーの位置に応じて)
  • 各タイルを描画するコードが高速であることを確認してください...理想的には、タイルごとにテクスチャ付きの正方形を 1 つだけ描画する必要があります。特に、レンダリング コードでタイルごとに複雑な操作を行うべきではありません。
  • 賢い人なら、VBO やテクスチャ座標の巧妙な使用などを使用して、1 回の OpenGL 呼び出しで複数のタイルを描画できます。しかし、これはタイルベースのゲームにはおそらく不要です。
于 2012-07-09T15:10:24.713 に答える