2016-01-20 53 views
0
  • 得到此BOID應用程序正在使用某些轉向算法處理。

enter image description here從ArrayList中移除元素Java處理Boid示例

  • 的類鳥羣被存儲在 對於每種顏色兩個單獨的ArrayLists。

  • 紅色BOID(捕食)具有 追求功能:

    class Creature { 
        int prey = 1; 
        PVector pursue(ArrayList boids) { 
    
         PVector steer = new PVector(); 
         if (prey < boids.size()) { 
         Creature boid = (Creature) boids.get(prey); 
         steer = PVector.sub(boid.location, location); 
         steer.mult(maxpursue); 
        } 
        return steer; 
        } 
    

該函數獲得紅色類鳥羣站在針對性白色BOID的頂部。

問題是如果所有的紅色boid都在它的上面,這個白色的boid就會消失。 (如上面的圖所示)

我可以添加一個新的BOID或捕食者與以下,但我不能刪除?:

+2

爲什麼你創建一個實例,添加它,然後立即從列表中刪除它呢? –

+0

現在你已經編輯了代碼,以便'planet.boids.remove(boid);'實際上不是任何方法的一部分。請發佈您聲稱不起作用的*實際代碼*。 –

+0

這只是爲了測試。如果我刪除創建一個新的實例,那麼它不能識別'捕食者'。我不知道如何改變代碼,以便它。嘗試像.. planet.boids.add(生物捕食者); , planet.boids.add(Creature.predator); ? –

回答

1

您發佈不會使一噸的感覺代碼。你想刪除現有的Boid,那麼爲什麼你要創建一個新的,然後立即刪除它?

您還沒有發佈的MCVE,所以我只能在一般意義上回答,但這裏就是你需要做什麼:

第1步:重構代碼,使其更有意義。如果你必須評論每一行,只要確定你確切知道代碼在做什麼。但是你不應該像添加新的Boid那樣做,然後在下一行刪除它。將問題分解成更小的步驟,並確保每個步驟都能完美地自行完成,然後再將其與其他功能混合使用。

步驟2:創建函數採用單個white Boidred BoidsList,並返回true如果white Boid應被刪除。在獨立示例草圖中使用硬編碼值自行測試此功能。

第3步:遍歷您的white Boids並調用您在步驟2中爲每個創建的函數。如果該函數返回true,則刪除該white Boid。您可能需要在此步驟中使用Iterator

如果您遇到上述其中一個步驟,請發帖MCVE以及特定問題,我們將從此處開始。很難回答一般的「我該如何做這個」類型的問題,但回答具體的「我試過X,期望Y,但得到Z而不是類型問題」更容易 - 尤其是如果我們有一個MCVE,我們可以在我們的實際運行自己的機器,而不是一些斷開連接的片段。