簡體   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