0

Javaを使用してグラフィカルなローグライクゲームを作成しています。ゲームでは、タイルオブジェクトの2D配列をJPanelにペイントしています。これらのタイルオブジェクトは地面を表します。ペイントに使用するすべてのテクスチャを含む.bmpスプライトシートがあります。プレイヤーが移動するたびに、プレイヤーに表示されているタイルを再描画する必要があります。

私の質問はパフォーマンスの質問です。私は過去にこれを実装して、タイルにJPanelを拡張させ、各タイルはbufferedImage.getSubImage()を使用してスプライトシートの適切なセグメントを表示するだけですが、親JPanelは単にすべてのタイルでpaint()を呼び出します。 2D配列。これは前のプロジェクトの小さな30x20マップでは問題なく機能しましたが、現在のゲームで機能するかどうかはわかりません。

同じアプローチを使用する必要がありますか、それとも描画時間を短縮する他の可能な解決策がありますか?TileクラスはBufferedImageなどの他のSwingまたはAWTコンポーネントを拡張する必要がありますか、それとも効果がありませんか?

ありがとう。

4

2 に答える 2

2

ボードに(タイルごとに1つではなく)単一のコンポーネントを使用して、各タイルのペイントを処理させることができます。別のレンダラーが個々のタイルペイントを処理して、ソリューションをよりモジュール化することができます。これは、JTableとそのセルのレンダリングで使用されるのと同様のアプローチです。

getSubImage()のパフォーマンスがわからない場合は、個々の画像を事前に抽出(およびキャッシュ)する価値があるかもしれません。

また、変更されたセルの再描画のみを確認してください(まだ行っていない場合)。

于 2010-03-04T02:27:52.130 に答える
2

このタイルベースのゲームは、1900x1200ピクセル、60x36タイルの大画面でうまく機能します。画像を目的の長方形にスケーリングすると、レンダリング予算の大部分を消費するように見えました。ここでさらに議論があります。

于 2010-03-04T03:43:49.713 に答える