繁体   English   中英

为什么我的应用此时会崩溃?

[英]Why does my app crash at this point?

每当我的游戏得分达到3时,它就会崩溃。 经过大量的审查后,我注意到它与这段代码有关,因为我将其删除,然后它不再崩溃。 最奇怪的是,它只会在播放一段时间后崩溃。 我可以玩一个新游戏,它将超过3个并且不会崩溃。 我不明白为什么它只会偶尔出现一次。然后我得到的错误代码是:

断言失败:(m_nodes [proxyId] .IsLeaf()),函数DestroyProxy,文件/Users/badlogic/jenkins/workspace/libgdx-mac/gdx/jni/Box2D/Collision/b2DynamicTree.cpp,第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");
    }
}

为什么它与分数相关:因为您仅在asteroids.bodies.size> 11时才开始运行代码-大概这仅在您将某物拍完后才会发生。

通常,从当前正在迭代的集合中删除项目是不安全的-如果没有声明asteroids.bodies,就很难确定这是否引起了您的问题。 但是遵循以下原则:

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

通常用于这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM