因此,我目前正在用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个对象。
我已经尝试通过使用-1调用我的object.size()或在进入每个对象的迭代之前对其进行初始化来限制进入链接列表的对象数量。甚至在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;
}
我基本上希望程序不会崩溃……并出现即时消息。 我想到的解决方案之一是让更多线程同时运行,但是我不知道该怎么做。 对不起,英语不好。