Я начал разрабатывать игру в стиле «Космический корабль против комет» на прошлой неделе, и теперь я остановился.
Цель игры - стрелять в кометы до того, как они пройдут мимо вашего корабля. Вы заставляете кометы взрываться, стреляя в них. Простая идея!
Однако иногда, когда я играю, я получаю ошибку "IndexOutOfBounds" . Это почти всегда появляется, когда я не стреляю некоторое время (размер моих снимков ArrayList равен 0), а когда я стреляю, и он сталкивается, он падает.
Так что у меня есть некоторые ошибка в моем коде, но я действительно не вижу ее. Теперь я надеюсь, что один из вас поймет, почему это происходит, и избавит меня от дальнейших ошибок "IndexOutOfBounds"! :)
Вот часть кода, которая дает сбой, включая функции, которые я использую для перемещения комет и снимков:
ИГРОВОЙ КЛАСС
if(!Game.player.getShots().isEmpty() && !comet.getComets().isEmpty()) { //Om de är tomma så ignorera
for(int x = 0; x < Game.player.getShots().size(); x++) { //Shots X
if(!comet.getComets().isEmpty() && !comet.getComets().isEmpty()) {
for(int y = 0; y < comet.getComets().size(); y++) { //Comets Y
if(comet.getComets().get(y).intersects(Game.player.getShots().get(x)) && !comet.getComets().isEmpty() && !Game.player.getShots().isEmpty()) {
//the for loop above is the line that won't compile sometimes
comet.getComets().remove(y);
Game.player.getShots().remove(x);
score++;
}
}
}
}
}
//Comet spawn timer
comet.addComets();
//Move the comets and shots!
Game.player.moveShots();
comet.moveComets();
repaint();
КОМЕТА КЛАССА
public ArrayList<Rectangle> getComets() {
return comets;
}
public void moveComets() {
if(!comets.isEmpty()) {
for(int x = 0; x < comets.size(); x++) {
comets.get(x).x -= cometSpeed;
}
}
}
КЛАСС ИГРОКА (Снимки в этом классе)
public void fire() {
shots.add(new Rectangle(x + player.width, y + 23, shotWidth,shotHeight));
}
public ArrayList<Rectangle> getShots() {
return shots;
}
public void moveShots() {
if(!shots.isEmpty()) {
for(int x = 0; x < shots.size(); x++) {
shots.get(x).x += fireSpeed;
}
}
}
Сохранить в Имейте в виду, что кометы и выстрелы являются «ArrayList вне объекта Rectangle»
Я предоставлю скриншоты ошибок и картину игры ниже!
В приведенном выше коде помечена строка ошибки, оператор if должен блокировать ее сбой (I думал).
Заранее спасибо! Вся помощь приветствуется! :)