2013-01-20 86 views
1

只有當對象被點擊並且需要從列表中移除時纔會丟棄。 這裏是代碼:爲什麼我的FPS下降?

if(event.type == TouchEvent.TOUCH_DOWN){ 
      for(Bottle bottle : new ArrayList<Bottle>(bottles)){ 
       if(bottle.position.dist(touchPoint) < 40){ 
        bottles.remove(bottle); 
        if(bottle.type == Bottle.BOTTLE){ 
         score+=10; 
         Assets.playSound(Assets.beeropenSound); 
        } 
        else if (bottle.type == Bottle.BOTTLE30){ 
         score+=30; 
         Assets.playSound(Assets.beeropenSound); 
        } 
        else if (bottle.type == Bottle.GLASS_OF_BEER){ 
         score+=5; 
         Assets.playSound(Assets.pourbeerSound); 
        } 
        else if (bottle.type == Bottle.WATER_BOTTLE){ 
         score-=50; 
        } 

        // burping 
        if (score % 200 == 0 && score > 1){ 
         Assets.playSound(Assets.burpSounds[burp]); 
        } 
        break; 
       } 
      } 

,這裏是FPS日誌:

01-20 19:18:19.629: D/FPS(27501): 59 
01-20 19:18:20.639: D/FPS(27501): 59 
01-20 19:18:21.639: D/FPS(27501): 49 
01-20 19:18:22.649: D/FPS(27501): 59 
01-20 19:18:23.669: D/FPS(27501): 60 
01-20 19:18:24.669: D/FPS(27501): 59 
01-20 19:18:25.689: D/FPS(27501): 60 
01-20 19:18:26.699: D/FPS(27501): 43 
01-20 19:18:27.719: D/FPS(27501): 60 
01-20 19:18:28.739: D/FPS(27501): 60 
01-20 19:18:29.759: D/FPS(27501): 60 

我試圖消除這種東西,但它是不是:

  • 刪除音效
  • 刪除流式背景音樂(3mb mp3文件)
  • 移除ArrayList的副本,它列出真正的瓶子列表並添加應該刪除的內容到另一個列表中,並從瓶子列表中刪除該列表
  • Assets.burpSounds [burp]:burp是隨機使用隨機java mudle生成的局部變量。我刪除(打嗝是在構造函數)它沒有工作...

有一件事是留下來的垃圾收集器。 這是什麼讓我的FPS下降? 我如何確定? 如何打擊這些敵人?

而且正如我之前所說的那樣只有在執行該代碼塊時丟失。

回答

1

我認爲這也是GC,我會在瓶子列表上添加一個標誌,告訴對象它被「移除」而不是實際移除它,從而避免了gc。

編輯:你爲什麼在每次觸摸時創建一個新的數組列表?不應該只是:

for(Bottle bottle : bottles) {...} 
+0

但在更新中使用了2次以上的列表,所以我應該添加!= null。我正在嘗試不同的方法:基於時間更新... – carobnodrvo

+0

因爲我必須從瓶子中移除物體,並且在迭代它時我無法移除它... – carobnodrvo

+1

當然,您可以,您只需將其從你的分數代碼後列表 –