2

タイル画像tile.pngがあり、ウィンドウ全体にタイルマップを作成しようとしています。これをアプレットとして作成しています。これは私のペイント方法のように見えますが、効果的ではありません。アプレットを実行すると、約2秒かかり、すべてを一度にレンダリングするのではなく、画面全体が画像で左から右にペイントされます。また、それはすべて、tile.pngの40個の小さなインスタンスではなく、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

編集:以下のコードを使用し、タイル画像を改善することでこれを修正しました。これが誰かを助ける場合の私の新しいタイル画像です:

tile-new.png

4

2 に答える 2

9
    for (x=0; x<= width / tileWidth; x++)
    {
            for (y=0; y<= height / tileHeight ; y++)
            {
                    g.drawImage(tile, x * tileWidth, y * tileHeight, this);
            }
    }

タイルの幅/高さでオフセットする必要があります。

于 2009-03-06T23:22:26.713 に答える
5

余談ですが、ある時点で「クリップ領域」のチェックを開始し、その領域外のものを描画しないようにすることをお勧めします。あなたのコードはそれを行うためにかなりうまく設定されています。

それを高速化するためにできるもう1つのことは、「ダブルバッファ」です。マップのサイズのコンポーネントを作成し、そのコンポーネントに対して getGraphics() を呼び出し、すべての描画をこの新しいグラフィックス オブジェクトに行い、ペイント メソッドに渡された実際の G​​raphics オブジェクトにコンポーネントを描画します。

これの良いところは、ペイント ステートメントを実行する前にマップ全体を描画し、すぐにそれを叩き出すことができることです。

詳細については、Java での Google ダブル バッファリングを参照してください。

于 2009-03-06T23:39:44.863 に答える