2009-03-06 17 views
2

タイル画像tile.pngがあり、ウィンドウ全体にタイルマップを作成しようとしています。私はこれをアプレットとして構築しています。これは、私のペイントメソッドがどのように見えるかですが、効果がありません。私がアプレットを実行すると、約2秒かかり、すべての画像を一度に表示するのではなく、画面全体が左から右に画像でペイントされます。また、それはすべて一つの大きなtile.pngのように見えるのではなくJavaでタイルマップを作成する方法は?

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の40個の小さなインスタンスところでtile.pngファイルは10×10ピクセルで、これは実際のIMGです:

tile.png http://img12.imageshack.us/img12/1368/tile.png

編集:下記のコードを使用して、タイル画像を改善して、これを修正しました。

tile-new.png http://i44.tinypic.com/11ufejk.png

答えて

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

あなたはタイルの幅/高さによって相殺する必要があります:それは誰かを助けた場合にここに私の新しいタイルIMGです。

+0

よく見えますが、正しくはありません。http://i41.tinypic.com/27y4d4x.jpg私はすべてのタイルを他のタイルと区別できるようにしたいです。 –

+0

タイル.pngファイルサイズを25x25に増やし、境界線を作成しました。ありがとう! –

5

ちょうど副メモとして、あなたはおそらくある時点で "クリップ領域"をチェックし、その領域外のものを描画しないことを望むでしょう。あなたのコードはかなりうまくセットアップされています。

スピードアップのためにできることは、「ダブルバッファ」です。マップのサイズのコンポーネントを作成し、そのコンポーネントのgetGraphics()を呼び出し、すべての図面をこの新しいグラフィックスオブジェクトに渡してから、コンポーネントをpaintメソッドに渡された実際のGraphicsオブジェクトに描画します。

これは面白いことですが、これまでペイント・ステートメントにヒットしてからすぐにスラップする前に、マップ全体を描画することができます。

Google Double Buffering in Java詳細情報

関連する問題