7

だから、私はJavaで2Dトップダウンゲームを作成しています。

私はJava2Dの指示に従っています:ハードウェアアクセラレーション-パート2-ハードウェアアクセラレーションを利用するためのバッファ戦略。

基本的に、私が考えているのはこれです
。マップにセクションを簡単に追加できるようにしたいと思います。したがって、私が見たいくつかのチュートリアルで提案されたルートには行きたくありません(各マップタイルには、周囲のタイルの隣接リストがあります。中央のタイルから始めて、幅優先探索を画面に表示します)。

代わりに、画面サイズのタイルのコレクション(簡単にするために32x32など)を作成し、これらの画面の「チャンク」のそれぞれに、隣接する各コレクションを参照するリストを作成することをお勧めします。次に、現在の画面と隣接する8つの画面用のバッファーを作成し、VRAMバッファーに表示部分を描画します。

私の質問は、これはこれを行うための正しい方法ですか、それともより良いオプションがありますか?私はかなりの数のチュートリアルを調べましたが、それらはすべて同じ(一見高いメンテナンス)オプションを提供しているようです。

タイルレベルで処理を行うには、隣接リストの1024倍が必要になるため、これがより適切な選択であるように思われます。また、「現在の」画面とその隣接画面を標準バッファに残したまま、表示部分のみをVRAMに配置することを検討した理由は、ハードウェアアクセラレーションに慣れておらず、想定できるスペースの量が完全にわからないためです。利用可能になります。Javaはとにかく標準バッファを高速化しようとするので、理論的にはそれぞれをVRAMに入れるのと同じくらい速いはずですか?

ありとあらゆる提案を歓迎します!

4

1 に答える 1

3

人気のあるタイルベースのゲームエンジンは見たことがありませんが、フライウェイトパターンを使用して、のビューポートに表示されるタイルのみをレンダリングすることを検討しますJScrollPaneJTableは例であり、使用可能な実装でもあります。

補遺:このJTableアプローチの利点の1つは、ビューモデルの分離です。これにより、タイル関連のリソースの取得をモデルに任せることができます。これにより、ビューを変更せずに最適化が容易になります。

スクロールバーがなくてもscrollRectToVisible()、拡張JComponentまたは適切なサブクラスを使用して活用できます。このsetDoubleBuffered()方法も役立つかもしれません。

于 2011-08-13T09:08:37.090 に答える