Я делаю новую игру, которая генерирует огромную сетку (скажем, 1000x1000).Игрок начинает с середины и перемещается в поисках «очков».Игрок может видеть только часть большей сетки в окне (15x15).Прямо сейчас у меня просто огромное количество прямоугольников, каждый из которых рисует буферизованное изображение блока грязи, который я создал.Вопрос: есть ли лучший тип переменной, который я должен использовать для хранения всех этих изображений?
Вот так выглядит мой класс Dirt (содержит прямоугольник и изображение, сгенерированное в начале):
public class Dirt extends Spot{
private int index;
public Dirt(int temp){
index = temp;
}
public Image getImageIndex(){return index;}
}
А вот кроме моего класса Board, который рисует всю Грязь:
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 изображений грязи, чтобы грязь (при рисовании) не выглядела как мозаика, а была случайной.Итак, в моем массиве Dirt каждая Dirt указывает на случайное изображение.
Дополнительный вопрос: Теперь, когда я создаю свою огромную сетку, как бы мне сделать так, чтобы игрок начинал с центра, а я рисовал окружающие клетки,В настоящее время я начинаю с начала массива в верхнем левом углу моего массива.Должен ли я создать логический флаг для каждой грязи того, должен ли он быть нарисован?