2017-07-15 127 views
1

我試圖讓人們能夠拿起硬幣我做了循環更新每一個硬幣和每個硬幣有一個循環來檢查是否有任何球員觸摸它,所以它像250 * 25 = 6250每個滴答/幀循環,任何建議如何使其更有效?這樣我的手機在玩電話時就不會下降到30?有效的多邊形碰撞檢測

屏幕呈現代碼:

for (int i = 0; i < coins.size(); i++) { 
    Coin coin = coins.get(i); 
    coin.update(delta); 
} 

硬幣更新方法:

for (int i = 0; i < GameScreen.players.size(); i++) { 
    Player player = GameScreen.players.get(i); 
    if (Intersector.overlapConvexPolygons(polygon, player.getPolygon())) { 
     //Picked up give coins blahblahblah 
     break; 
    } 
} 

coins.size是250

和players.size是25

+0

在[Game Development Stack Exchange](https://gamedev.stackexchange.com/)上,此問題可能更適合(如果尚未解答)。 – Bobulous

+0

@Bobulous它是在兩者之內。是的,LibGDX是gamedev。但它也是編程。這將是兩個網站上的主題。 (除非它是重複的,但這是一個不同的問題,這個問題的內容是關於這兩個網站的主題。) – Zoe

+0

@LunarWatcher因此,我沒有投票結束的原因。但是,這個與遊戲開發密切相關的問題可望從更專業化的渠道獲得更快,更有知識的答案。 – Bobulous

回答

0

我已經通過進行空間網格檢測來解決這個問題。它將循環量減少了大約40倍。

0

我就開始做只從球員的角度進行檢查 - 硬幣不需要檢查是否有任何合作除了除了與硬幣相互作用的玩家之外還有其他東西。根據玩家的形狀,只需讓玩家在玩家位置的某個半徑範圍內拿起所有硬幣即可 - 如果您想這樣做,只需找到玩家與每個硬幣的距離,然後選擇如果它在這個距離之內,那就投幣。 (實際上檢查距離的平方更有效 - 結果是相同的)。如果您不想爲拾音器本身使用半徑,如果您只測試每個玩家對可能重疊的距離內的硬幣,它仍然會大大減少時間。