2012-07-13 60 views
1

我需要像素完美的碰撞檢測爲我的Android遊戲。我寫了一些代碼來檢測與「正常」位圖(不旋轉)的衝突;工作正常。但是,我沒有得到它的旋轉位圖。不幸的是,Java沒有旋轉矩形的類,所以我自己實現了一個。它保存了與屏幕相關的四個角的位置並描述了其位圖的確切位置/層;稱爲「itemSurface」。我的解決探測計劃是:Android上旋轉位圖的碰撞檢測

  1. 檢測不同itemSurfaces
  2. 的交叉計算的重疊區域
  3. 設置這些有關地區以其優越的itemSurface /位
  4. 比較每個單個像素與其他位圖的相應像素

嗯,我在第一個和第二個出現問題。有人有想法或有一些代碼嗎?也許已經有Java/Android庫中的代碼,我只是沒有找到它。

回答

0

我知道你想要在矩形之間進行碰撞檢測(以不同方式旋轉)。您不需要計算重疊區域。而且,比較每個像素將是無效的。

實現一個static boolean isCollision函數,它會告訴你在一個矩形和另一個矩形之間有碰撞。在你拿一張紙之前,先做一些幾何圖形來找出確切的公式。出於性能的原因並不在一些Rectangle類包裹矩形,只是使用原始的類型,如雙打等

然後(僞碼):

​​

這是O(n^2),其中n是矩形數量。如果你需要更多的性能,有更好的算法。 bounce函數改變移動矩形的向量,以便模仿碰撞。如果物體的重量是相同的(你可以用長方形的大小來貼近重量),你只需要交換兩個速度矢量。

要正確反彈元素,您可能需要存儲輔助表boolean alreadyBounced[][],以確定哪些矩形在反彈(碰撞)後不需要更改其向量,因爲它們已被反彈。

一個提示:

如果你的Android下做一個遊戲,你必須小心,以遊戲過程中不分配內存,因爲它會更快調用GC,這需要很長的時間,緩慢起伏你的遊戲。我建議你看this視頻和相關。祝你好運。

+0

問題是我正在使用部分透明的位圖。這就是爲什麼我必須比較每一個像素來完成這個爆炸看起來是真實的。重疊區域是必須知道位圖的哪些像素必須進行比較的。 (如果有更有效的方法,請糾正我)此外,確切的公式是我的主要問題:D。我已經在尋找他們很多小時了。我希望有人知道一個算法。 PS:非常感謝您的提示:) – user1524194 2012-07-13 19:31:33