2016-08-20 21 views
-3

我剛剛開始使用Java來學習遊戲開發。如何做(或編碼)以便Bullet對象數組可以與Zombie對象數組相遇?

我已創建的類的

  1. 的ArrayList殭屍類子彈的
  2. 的ArrayList

每兩個ArrayList中的對象的有一個稱爲其圍繞型Rectangle的RECT可變他們自己的屏幕上的圖形。

我的目標是當任何子彈遇到任何殭屍時發揮作用。

我的問題是我不知道該怎麼做「任何子彈遇到任何殭屍」。

我的方法:我用RECT變量通過使用該方法rect.intersect(R)來測試是否兩個對象的已相互碰撞。我正在測試Bullet ArrayList中的每一個項目符號,看看它是否與殭屍ArrayList中的任何殭屍發生衝突,這意味着我爲每個框架完全通過兩個ArrayList來運行此功能。必須有更好的方法.. ??

+2

表現出一定的代碼你做了 – Shahid

+0

* ...這意味着我這兩個表運行完全每幀只進行提供此功能。*有沒有更好的辦法。 –

+0

也許你可以優化......取決於你的遊戲。例如,按x位排序這兩個列表,然後可以忽略比最右邊的殭屍更靠右的任何子彈。 y一樣。不知道你會獲得多少收益。與所有優化一樣,首先獲取一個分析器,並查看您的代碼花費的時間。 – Robert

回答

1

唯一的「更好的方法」是在獨立的線程上運行碰撞檢測,以便在執行其他邏輯時檢測碰撞。 這並不是最容易實現的方法,除非您遇到碰撞檢測的大幅度減速,否則我會建議您繼續按原樣。

您也可以嘗試縮小碰撞檢測考生...

例如,如果一些殭屍/子彈是關閉屏幕,你可能,如果發生碰撞,所以你可以完全跳過說不在乎實體。

是的,你將不得不首先檢查實體是否在屏幕矩形中,但它只能在每個列表中運行一次,並且可能使您無法運行通過一堆您不在乎的衝突檢測。

TL; DR:如果你沒有經歷過任何大規模的性能下降,我會嘗試繼續玩下去,並首先建立你對碰撞檢測的理解,然後擔心優化。

我希望它能幫助:)

+0

如果您試圖「縮小」碰撞檢測,那麼您將不得不檢查每個項目符號,看看它們是否在每一幀的屏幕之外,因此沒有太多的收穫。目前的做法是最有效和最容易實施的 –