質問
タイルイメージtile.pngがあり、ウィンドウ全体にタイルマップを作成しようとしています。これをアプレットとして構築しています。これは私のペイント方法のようですが、効果的ではありません。アプレットを実行すると、約2秒かかり、すべてが一度にレンダリングされるのではなく、画面全体が左から右にイメージでペイントされます。また、すべて40個のtile.pngの小さなインスタンスではなく、1つの大きなtile.pngのように見えます
public void paint(Graphics g)
{
Image tile=getImg("tile.png");
int width=this.getWidth();
int height=this.getHeight();
int x;
int y;
for (x=0; x<= width; x++)
{
for (y=0; y<= height; y++)
{
g.drawImage(tile, x, y, this);
}
}
}
tile.pngファイルは10 x 10ピクセルですが、これは実際のimgです:
tile.png http://img12.imageshack.us/img12/1368/ tile.png
編集:以下のコードを使用し、タイルイメージを改善することでこれを修正しました。誰かに役立つ場合の新しいタイルimgは次のとおりです。
解決
for (x=0; x<= width / tileWidth; x++)
{
for (y=0; y<= height / tileHeight ; y++)
{
g.drawImage(tile, x * tileWidth, y * tileHeight, this);
}
}
タイルの幅/高さでオフセットする必要があります。
他のヒント
補足として、「クリップ地域」の確認を開始することをお勧めします。ある時点で、その地域の外に物を描かない。あなたのコードはそれを行うためにかなりうまくセットアップされています。
これを高速化するためにできるもう1つのことは、「ダブルバッファ」です。マップのサイズのコンポーネントを作成し、そのコンポーネントのgetGraphics()を呼び出し、この新しいグラフィックスオブジェクトに対してすべての描画を行い、ペイントメソッドに渡された実際のグラフィックスオブジェクトにコンポーネントを描画します。
これの良い点は、ペイントステートメントをヒットする前にマップ全体を描画し、すぐにそれを平手打ちできることです。
詳細については、JavaでのGoogleダブルバッファリング。