为什么我的应用程序崩溃了?

时间:2014-04-09 12:29:54

标签: java arraylist libgdx box2d

每当我的游戏达到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");
    }
}

1 个答案:

答案 0 :(得分:1)

为什么它与得分有关:因为你只在asteroids.bodies.size&gt; 11时才开始运行代码 - 这可能只发生在你拍摄之后。

一般情况下,从集合中删除当前正在迭代的项目是不安全的 - 如果没有小行星的声明。很难看出这是否会导致您的问题。但是有些东西:

while (there are more bodies than I want)
  remove the first body in the list

通常用于这种情况。