Теперь, когда я загружаю свою карту из 2D-массива char
, игра очень медленная, когда я загружаю более 100 блоков (область 10x10).У меня есть это рендеринг блоков только на определенном расстоянии от персонажа уже.Я также считаю, что знаю, почему он работает так медленно, но я не знаю, как это исправить.Вот код:
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.Если вам нужен исходный код игры, чтобы помочь мне решить эту проблему, прокомментируйте, что он вам нужен, и я опубликую его.