私は巨大なグリッドを生成する新しいゲームを作っています(1000x1000と言うことができます)。プレイヤーは真ん中でスタートし、「ポイント」を探し回って移動します。プレーヤーはウィンドウ内の大きなグリッドの一部(15x15)しか見ることができません。今私はちょうど私が作成した汚れブロックのbufferedimageをペイントする矩形の巨大な配列を持っています。質問:私はこれらのすべての画像を格納するために使用すべきより良い変数タイプがありますか?Java Swing Huge Grid
これは、(はRECT、および最初に生成された画像を保持している)のような私のダートクラスが見えるものです:
public class Dirt extends Spot{
private int index;
public Dirt(int temp){
index = temp;
}
public Image getImageIndex(){return index;}
}
そして、ここでは、離れて、すべての汚れを描く私の取締役クラスのです
public class Board extends JPanel{
private final int BLOCK_SIZE; //Holds the size of each block
private final int SIZE; //Holds the size of the board
private DirtImages[] imgs_Dirt = new DirtImages[20]; //Holds 20 random dirt images - generated at begtinning
private Spot[][] spots;
public Board(int size, int blocksize){
SIZE = size;
BLOCK_SIZE = blocksize;
//Board
setSize(SIZE,SIZE);
//Timer Label
add(JTimerLabel.getInstance());
//Create 20 random Images of dirt to use for the rest of dirts
for(int i = 0; i < 20; i++){
imgs_Dirt[i] = new DirtImages(new Rectangle(0,0,BLOCK_SIZE,BLOCK_SIZE));
add(imgs_Dirt[i]);
}
//Create Dirt
spots = new Dirt[500][500];
java.util.Random randomGenerator = new java.util.Random();
for(int i = 0; i < spots.length; i++){
for(int j = 0; j < spots.length; j++)
spots[i][j] = new Dirt(randomGenerator.nextInt(20));
}
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//Draw Grid #First
for(int i = 0; i < spots.length; i++){
for(int j = 0; j < spots.length; j++)
if(spots[i][j] != null)
g2d.drawImage(imgs_Dirt[((Dirt)spots[i][j]).getImageIndex()].getImage(), BLOCK_SIZE*i,BLOCK_SIZE*j,BLOCK_SIZE,BLOCK_SIZE, null);
}
Toolkit.getDefaultToolkit().sync();
g2d.dispose();
requestFocus();
}
私は汚れ(塗装されたとき)がタイル張りのように見えないがランダムであるように、20の汚れ画像を作成する。だから、私の汚れの配列では、各汚れはランダムな画像を指しています。
その他の質問:私は巨大なグリッドを作成したので、どのようにしてプレイヤーが中心から始まり、周囲のセルを描くのですか。現在、私は配列の左上隅にある配列の先頭から始めます。描画する必要があるかどうかの各汚れに対してブール値のフラグを作成する必要がありますか?
で決定しています。 [paint(Graphics)]ではなく 'JPanel'を' paintComponent(Graphics) 'に置き換えます –
http://codereview.stackexchange.com/ –
また、JLabelのグリッドを作成し、ImageIconを作成することもできますJLabelsの間で共有されます。 –