2012-04-06 8 views
0

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

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

多くの感謝!

+1

'svg's(ベクトルグラフィックス)はここで良いでしょう。 – Jon

+0

見ていただきありがとうございます。 –

答えて

1

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

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

私はあなたが次の読み取りをお勧め:流体ズームとは反対に、(すなわち、各ズームレベルはカマーから一定の距離である)(

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

+0

アドバイスありがとうございます! –

+0

メイングラフィックスコンポーネントにアフィン変換を使用する場合、コンピュータはレンダリングされるか、または少なくとも可視領域の外にあるものを計算しますか?明らかに、ゲームがすべての通常のものを計算しなければならない場合は、可視領域だけでなくマップ全体で、CPU使用量がさらに多くなります。ありがとう! –

+0

@DanielMessiasタイルがビューの外にある場合、レンダリングされませんが、無駄なリソースが溜まります。カリングの場合、コード内で最適化を行う必要があります。一般に、カメラの截頭を含む四角形があります。これは、翻訳とズームを適用して変更する必要があります。次に、それに基づいてカリングを適用し、表示するものだけをレンダーするために送信します。あなたは目に見えないオブジェクトの行列計算をしたくありません! –

0

をあなたは固定ズームをやっている場合プレーヤーは3.3倍、7.5倍、1倍、2倍、3倍など)だけでなくズームインすることもできます。ズーム変換を適用するだけで、これを解決しようとするのは無駄です。これは最も複雑ではないアプローチなので魅力的ですが、実装の観点から理解するのは簡単ですが、最大ズームアウトでは、X方向に10倍、10倍大きく描画することになりますY方向 - つまり、レンダリングしなければならない世界のエリアは、最大ズームイン時の100倍です。また、ズームアウトしているときに、ハードウェアによってテクスチャが押しつぶされるような気がします。コンピュータグラフィックスはオプティクス(サブピクセルレンダリング)と同じではなく、コンピュータグラフィックスで起こる他のことは、ソフトウェア/ハードウェアからそのタスクを引き渡すと、テクスチャが非常によく見えるようにはなりません。

流体ズームを行っても、私はまだ詳細レベルのテクスチャを行い、レンダリングされる世界とカメラとの距離に応じてダイナミックにスワップアウトします。

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

AffineTransformの適用は良いアイデアのように聞こえるかもしれませんが、非常に計算コストが高く、60fpsのパフォーマンスが必要な場合は、このように達成する可能性は非常に低いです。私の言葉を取ってはいけません。それを試してみると、それがどれほどひどいのかを見てください。

+0

私はあなたの意見を見ます。あまりにも多くの10のズームレベルであなたのポイントに同意します。それは楽しいプロジェクトの暇な時間なので、パフォーマンスは重要ではありませんが、私は完全にあなたが5を超える必要はないことに同意します。私は比較的新しいJavaですので、シンプルなゲームで画像変換を使用する方が簡単でしょう私は完全にあなたのポイントを見て、入力のためにありがとう:) –

+1

そのいずれかまたは他のいずれかではありません。流体ズーム(変換あり)と異なるレベルの詳細を組み合わせることができます。例えば、中世の総戦争IIを取る。ズームアウトすると、3Dモデルのテクスチャの質が低下します。さらにズームアウトすれば、2Dスプライトになります!! –

+0

また、最大ズームインは「通常ズーム」ではない場合があります。だから、10倍大きい画面領域を表示することはそれほど大きなものではないかもしれませんが、普通です。描画するオブジェクトの数とテクスチャの質(ピクセル密度)はすべて同じです。 –