2012-06-05 23 views
1

我正在嘗試製作一款全自動遊戲引擎,需要根據事件進行工作。我面臨的問題是我已經創建了一個地圖類,並且已經在遊戲類中初始化了。它幾乎是靜態的,只有一個地圖存在一個遊戲。通過清除當前地圖中的對象並添加新地圖來加載新地圖。你可以在這裏看到地圖類的來源。Java遊戲開發。快速製作瓷磚地圖。優化建議

http://code.google.com/p/game-engine-for-java/source/browse/src/com/gej/map/Map.java

的主要問題涉及碰撞檢測,在這裏我使用蠻力的碰撞檢測,我不應該。這會使遊戲變慢,我只想檢查碰撞對象是否更接近對象。我一直在使用MapLoader接口來構建地圖。我在想在另一個線程中調用對象的collision()方法可能會有所幫助。但是所有的地圖對象都是在Game類中更新的。

下面是遊戲類,如果在情況下,它可能會幫助

http://code.google.com/p/game-engine-for-java/source/browse/src/com/gej/core/Game.java

有一些倍,對象不被破壞的問題。我打電話給地圖的removeObject()方法,但它需要1秒的延遲,有時不會刪除。

它給了我48-64 fps的平臺遊戲中的158個對象在遊戲中。但在太空侵略者風格的遊戲中,它只能提供20-30幀/秒的速度。任何意見的優化,不勝感激...

如果有人能夠得到我的教程二進制間距等,我會感激。

回答

2

查看代碼的兩條建議:第一件事是,您應該儘量減少碰撞檢測中的對象分配,不要創建新的Rectangles,通過直接編寫碰撞檢測算法處理已有的數據。

二的更重要的東西:一個碰撞檢測引擎,則必須使用兩個層面開展工作:

  • 碰撞的粗略水平已經排除了是肯定太遠碰撞(你可以在這裏使用許多技術對象,像binary spatial partition算法大碰撞的斑點,或對象分層結構)
  • 微細水平,這將計算用於可能發生的碰撞的特定細節,以更精確的算法
+0

代替使用rectan的我可以自己檢查邊界... –

+0

修改Game類中的線程。現在碰撞檢測是在單獨的線程中完成的,現在碰撞檢測對於地圖中的多達3000個對象是快速的。降低1-2 fps,但對於簡單的2D引擎就足夠了 –