每当我的游戏达到3分时,它就会崩溃。经过多次审核后,我注意到它与此代码有关,因为我会删除它,然后它就不会崩溃了。关于它的最奇怪的部分是,它只会在玩了一段时间后崩溃。我可以玩一个新游戏,它将超过3而不会崩溃。我不明白为什么它偶尔会发生一次我得到的错误代码是:
断言失败:(m_nodes [proxyId] .IsLeaf()),函数DestroyProxy,文件/Users/badlogic/jenkins/workspace/libgdx-mac/gdx/jni/Box2D/Collision/b2DynamicTree.cpp,line 127。
代码:
int j = Asteroids.bodies.size;
if(j == 9 && p == 0) {
score ++;
p ++;
store.coins.putInteger("coins", (store.coins.getInteger("coins", 0) + 1));
}
if(j == 10 && p == 1) {
score ++;
p ++;
store.coins.putInteger("coins", (store.coins.getInteger("coins", 0) + 1));
}
if(j == 11 && p == 2) {
score ++;
p ++;
store.coins.putInteger("coins", (store.coins.getInteger("coins", 0) + 1));
}
try {
if(j > 11) {
for(int i = 0; i < Asteroids.bodies.size - 11; score ++) {
world.destroyBody(Asteroids.bodies.get(i));
Asteroids.bodies.removeIndex(i);
store.coins.putInteger("coins", (store.coins.getInteger("coins", 0) + 1));
}
}
}
catch(NullPointerException e) {
System.out.println("oops");
}
}
答案 0 :(得分:1)
为什么它与得分有关:因为你只在asteroids.bodies.size&gt; 11时才开始运行代码 - 这可能只发生在你拍摄之后。
一般情况下,从集合中删除当前正在迭代的项目是不安全的 - 如果没有小行星的声明。很难看出这是否会导致您的问题。但是有些东西:
while (there are more bodies than I want)
remove the first body in the list
通常用于这种情况。