LinkedList java.lang.IndexOutOfBoundsException: индекс: 0, размер: 1 - PullRequest
0 голосов

Так что в настоящее время я делаю игру на java для проекта колледжа и, следуя учебному пособию, которое я нашел на youtube, я использую LinkedList, чтобы упорядочить все мои классы, которые являются наследниками моего класса GameObject, все работает "гладко" безВ большинстве случаев возникают проблемы, но время от времени, обычно, когда в моей игре много объектов, программа вылетает и выдает мне:

Exception in thread "Thread-0" java.lang.IndexOutOfBoundsException: 
Index: 1277, Size: 1278
at java.base/java.util.LinkedList.checkElementIndex(LinkedList.java:559)
at java.base/java.util.LinkedList.get(LinkedList.java:480)
at game.Boss1_wings.collision(Boss1_wings.java:1319)
at game.Boss1_wings.tick(Boss1_wings.java:538)
at game.Handler.tick(Handler.java:15)
at game.Game.tick(Game.java:123)
at game.Game.run(Game.java:84)
at java.base/java.lang.Thread.run(Thread.java:834)
AL lib: alc_cleanup: 1 device not closed

Очевидно, что размер и номер индекса зависят отобъекты, которые в настоящее время находятся в моей игре, и все же иногда она падает примерно с 30-40 или даже до 0-10 объектов.

Я уже пытался ограничить число объектов, попадающих в связанный список, вызывая my object.size () со значением -1 или инициализируя его перед тем, как он входит в итерацию для каждого объекта.И даже несмотря на то, что object.size () - 1, кажется, позволяет программе и игре запускаться, кажется, что происходит сбой даже чаще, чем обычно, поэтому это не решение.

это в основном мой класс-обработчиктот, который использует LinkedList и проходит через него методом "tick ()".

public static int type=0;
public static int Ulti=0;
LinkedList<GameObject> object= new LinkedList<GameObject>();


public void tick(){
    for (int i=0 ; i<object.size() ; i++) {
        GameObject tempObject = object.get(i);
        tempObject.tick();
    }
    if (HUD.HEALTH==0){
        Handler.Ulti=0;
        setType(0);
    }
}

public void render(Graphics g) {
    for (int i=0 ; i<object.size() ; i++) {
        GameObject tempObject = object.get(i);
        tempObject.render(g);
    }
}
public void addObject(GameObject object){
    this.object.add(object);
}

public void removeObject(GameObject object){
    this.object.remove(object);
}

public void setType(int type) {
    this.type = type;
}
public int getType() {
    return type;
}

В основном я ожидаю, что программа не потерпит крах ... с ошибкой, которую я получаю.Одно из решений, о которых я подумал, состояло в том, чтобы запустить больше потоков одновременно, но я не знаю, как это сделать.Извините, если плохой английский.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...