gpt4 book ai didi

java - 从数组中删除某些内容但游戏崩溃

转载 作者:行者123 更新时间:2023-12-02 05:19:56 25 4
gpt4 key购买 nike

我有一个数组,我在平铺 map 上创建了几把剑,当我踩到它们时,它们需要被删除,但是当我踩到它们时,游戏会崩溃。

位于 java.util.ArrayList$Itr.checkForCommodification(来源未知)在 java.util.ArrayList$Itr.next(来源未知)

我的代码:

我猜循环正在寻找该对象,即使它已被删除?

private List<Sword> swords = new ArrayList<Sword>();

我创建它们一次:

public GameRender(GameWorld world, int gameHeight) {
for (int i = 0; i<100 ; i++ ) {
swords.add(new Sword());
}

当我踩到它时:

for (Sword sword : swords) { 
if(playery+7>=sword.position.y && playery+7<=sword.position.y+tilesize
&& playerx+7>=sword.position.x &&playerx+7<=sword.position.x+tilesize) {
sword.pickMe();
swords.remove(sword);
}
}

render() 中还有其他循环:

for (Sword sword : swords) {
sword.createMe();
}

我认为你不需要看剑类。如果你这样做我会把它放在这里。我该如何修复它以免出现错误?

最佳答案

for (Sword sword : swords) { 
if(playery+7>=sword.position.y && playery+7<=sword.position.y+tilesize
&& playerx+7>=sword.position.x &&playerx+7<=sword.position.x+tilesize) {
sword.pickMe();
swords.remove(sword); //this line throws ConcurrentModificationException
}
}

由于如何增强for循环有效,您要么需要使用 Iterator<Sword>删除它:

Iterator<Sword> iterator = swords.iterator();
while(iterator.hasNext())
{
Sword sword = iterator.next();
if(playery+7>=sword.position.y && playery+7<=sword.position.y+tilesize
&& playerx+7>=sword.position.x &&playerx+7<=sword.position.x+tilesize) {
sword.pickMe();
iterator.remove();
}
}

或以下内容:

  for (int i = 0; i < swords.size(); i++) { 
Sword sword = swords.get(i);
if(playery+7>=sword.position.y && playery+7<=sword.position.y+tilesize
&& playerx+7>=sword.position.x &&playerx+7<=sword.position.x+tilesize) {
sword.pickMe();
swords.remove(i--);
}
}

关于java - 从数组中删除某些内容但游戏崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26590234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com