2

私はJavaで2Dトップダウンタイルベースのゲームを構築しています。当然のことながら、ゲームをパンしてズームインすることができます。現在、各タイルの範囲は10x10ピクセルから100x100ピクセルで、10の異なるレベルにズームインしています。現在、各ズームレベルのタイルは個別のスプライトシートに保存され、プログラムの起動時に読み込まれ、バッファリングされた画像配列に保存されます。これが最善の方法ではないと確信しています。

長期的に効率を高めるためのヒントを探しています。100x100のタイルのみを使用し、Javaで動的にスケーリングする方がよいでしょうか。どういうわけかJavaでベクターグラフィックスを使用します(私は確かに方法ですが、グーグルが私を助けることができると確信しています)または何ですか?

どうもありがとう!

4

2 に答える 2

1

私はダイナミックに行きます。通常、コンピュータグラフィックスでは、グラフィックスコンテキストに適用され、描画するすべてのものを変更するマトリックスを使用します。

これは、位置、スケール、回転などを変更するために使用されます。すべてのタイルにカメラの位置を差し引くのではなく、グラフィックスコンテキストに一度変換を適用してから、タイルをワールド位置に描画します。グラフィックコンテキストは、タイルを正しい画面スペースに配置する処理を行います。

次のように読むことをお勧めします。

http://docs.oracle.com/javase/tutorial/2d/advanced/transforming.html http://www.javalobby.org/java/forums/t19387.html

于 2012-04-06T17:52:34.590 に答える
1

流動ズーム(プレーヤーは1倍、2倍、3倍などだけでなく、3.3倍、7.5倍までズームインできます)とは対照的に、固定ズームを実行している場合(つまり、各ズームレベルはカメラからの固定距離です)。 )次に、ズーム変換を適用するだけでこれを解決しようとするのは非常に無駄です。これは最も複雑でないアプローチであり、実装の観点からは理解しやすいため、魅力的ですが、最大ズームアウトでは、X方向に10倍、で10倍大きい領域をレンダリングすることになります。 Y方向-つまり、領域レンダリングする必要のある世界の面積は、最大ズームイン時の100倍です。また、ズームアウトするときにテクスチャがハードウェアによって押しつぶされる方法が気に入るとは思えません。コンピュータグラフィックスは光学系と同じではありません-サブピクセルレンダリング、およびコンピュータグラフィックスで発生する他のことは、ソフトウェア/ハードウェアからそのタスクを引き渡した場合、テクスチャを非常に見栄えよくすることはありません。

流体ズームを行う場合でも、詳細レベルのテクスチャを実行し、レンダリングされるワールドとカメラの間の距離に応じて動的にそれらを交換します。

また、10ズームレベル?本当に10のズームレベルが必要ですか?ズームは通常、2Dゲームで使用され、特定のズームレベルが特定の一連のアクティビティに特に適しているため、さまざまな詳細レベルでさまざまなアクティビティを実行できます。これを達成するために10のズームレベルを必要とした2Dゲームを覚えていません。3-5は私が今まで見た中で最も多く、それが十分であると感じたことはありません。また、10ズームレベルのすべてのズームレベルで画像を生成することは、多くの芸術作品のようです。

また、AffineTransformを適用することは良い考えのように聞こえますが、計算コストが非常に高く、60 fpsのパフォーマンスが必要な場合、この方法でそれを実現する可能性はほとんどありません。しかし、私の言葉を信じないでください。試してみて、それがどれほどひどく倒れるかを見てください。

于 2012-04-06T18:19:43.187 に答える