Теперь, когда я загружаю свою карту из 2D-массива char
, игра действительно медленная, когда я загружаю более 100 блоков (область 10x10). У меня есть это отображение блоков только на некотором расстоянии от символа. Я также считаю, что знаю, почему он работает так медленно, но я не знаю, как это исправить. Heres код:Дальность рендеринга для 2D-массивов - Minecraft 2D
public void renderBlocks(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics 2D)g;
for(int x = 0; x < 50; x++) {
for(int y = 0; y < 50; y++) {
//blocks[x][y] tells it which type of block to load
Block next = new Block(blocks[x][y], x, y);
if((next.getX() - player.getX()) >= (-13*32) &&
(next.getX() - player.getX()) <= (13*32)) {
if((next.getY() - player.getY()) >= (-6*32) &&
(next.getY() - player.getY()) <= (6*32)) {
g2d.drawImage(next.getImage(), (next.getX() - player.getX()),
(next.getY() - player.getY()), this);
}
}
}
}
}
Линия:
Block next = new Block(blocks[x][y], x, y);
является то, что делает его работать очень медленно. Несмотря на то, что он не выводит их на экран, он все еще устанавливает Block next
, равный new Block(blocks[x][y], x, y)
для всех элементов blocks[x][y]
. Проблема в том, что я не могу просто удалить эту строку кода, потому что она решает, как далеко от символа рисовать блоки. Мне нужно сделать это так, чтобы он только устанавливал следующее равным количеству элементов блоков [x] [y], которые тянутся к экрану.
Я попытался сдачи:
if((x - player.getX()) >= (-13*32) && (x - player.getX()) <= (13*32)){
Block next = new Block(blocks[x][y], x, y);
...Rest of Code here
}
вокруг него и то же самое для y - playerY
, но он не работает, хотя в теории это должно быть.
Пожалуйста, ответьте на этот вопрос, если вы знаете способ сделать это и заставить игру работать так же быстро, как это было при загрузке блоков из ArrayList, что позволило мне загрузить более 5000 блоков и запустить их на хорошем уровне. FPS. Если вам нужен исходный код для игры, чтобы помочь мне исправить эту проблему, прокомментируйте, что вам это нужно, и я опубликую его.
'blocks' является 2d массив типов блоков? –