2012-10-02 33 views
1

嘿傢伙,所以這裏是我的困境。檢測與LinkedList中的精靈的碰撞

我有一個動畫精靈,我正在使用並使用動畫偵聽器來了解動畫何時完成或其最後一幀。

當動畫在其最後一幀時,我想刪除它碰撞的任何對象。

因此,這裏是我現在我遇到的問題:我使用的是TimeHandler來檢測碰撞

,但問題是我已經加入到遊戲中移動物體的一個隨機時間,我將它們添加到一個LinkedList,因爲它們在加載時被添加到場景中。

然後在我的TimeHandler中,我嘗試檢測像這樣的碰撞;

mEngine.registerUpdateHandler(new TimerHandler(.005f, true, 
     new ITimerCallback() { 
      @Override 
      public void onTimePassed(final TimerHandler pTimerHandler) { 

      if (frames == 1) { 

       if (woodSprites.hasNext()) { 

       Sprite sprite = woodSprites.next(); 
       if (bombSprite.collidesWith(sprite)) { 
        Log.e("Frame", "Collision"); 
        removeFace(sprite); 

       } 
       } 
      } 

      } 

     })); 

這種方法的問題是,如果炸彈精靈與可拆卸的精靈,在迭代心不是未來的碰撞則不會檢測衝突和什麼都不會發生。我需要能夠刪除特定的可移動精靈,當它發生衝突

有誰知道或有任何建議讓這個工作?

+0

LinkedList中有多少項目?迭代項目和呼叫碰撞對於每個項目來說是否太昂貴? – acj

回答

3

我沒有看到一個理由使用TimerHandler,它可以執行非常糟糕,因爲它可能只是保持缺少合適的框架。你是否在做這個來提高性能?試試這個代碼:

mEngine.registerUpdateHandler(new IUpdateHandler() { 

    @Override 
    public void reset() {} 

    @Override 
    public void onUpdate(float pSecondsElapsed) { 
     if (frames == 1) { 
      for (Sprite s : woodSprites) { 
       if (bombSprite.collidesWith(s)) { 
        removeFace(s); 
       } 
      } 
    } 
}); 

我認爲性能點擊應該可以忽略不計。

0

如果我正確地理解了這個問題,就不會瀏覽列表,這就是爲什麼你只用一個元素來檢測碰撞。嘗試:

while (woodSprites.hasNext()) { 
    if (bombSprite.collidesWith(woodSprites)) { 
     Log.e("Frame", "Collision"); 
     removeFace(woodSprites); 
    } 
}