2012-02-06 51 views
0

如何檢測兩個或多個對象是否碰撞? 我只想使用默認框架,例如Core Graphics。或者我必須使用Box2d或Cocos2d?iOS - 如何檢測兩個或多個對象是否碰撞

編輯 你說得對,問題不是很清楚。 所以這是情況: 我有多個UIImageView與加速度計一起移動,但我希望當兩個或多個圖像碰撞時,這些不會相互重疊。清楚嗎?

+0

這非常含糊。我們需要知道用什麼數據結構來表示對象,然後我們需要知道對象所處的空間類型(1D,2D,3D?)。您不需要*任何特定的框架,雖然他們通常是有幫助的。搜索'碰撞檢測'並做一些閱讀是獲得一些背景的好方法,然後再回過頭來重新解釋這個問題。 – ipmcc 2012-02-06 11:57:00

+0

所有你需要的是數學... – vikingosegundo 2012-02-06 12:00:39

+0

我使用UIImageView對象,如果這可以幫助 – 2012-02-06 12:06:57

回答

0

如上所述,您的問題非常模糊,因此難以簡潔回答。但爲了給你一些想法,你可以用核心動畫來做到這一點,儘管一些第三方遊戲引擎/框架可能更有效率。

本質上,你創建一個定時器,經常會觸發(多長時間取決於你碰撞的對象的大小和它們的速度 - 太慢,並且在定時器觸發前對象可能相互碰撞並相互傳遞) - 數學這裏是你的朋友)。

每次計時器啓動時,都會檢查屏幕上的每個對象是否與其他對象碰撞。爲了提高效率,你應該確保你只檢查每一對 - 即。如果你有A,B,C,d對象,查了& d而不是d & A.

如果你有一個碰撞處理它,但是你想(動畫/點/通知/任何你想做的事)。

在帖子中有太多可以覆蓋的地方。我建議你檢查出在cocoawithlove的小行星遊戲優秀的書面記錄,特別是第3部分(儘管不是iOS上的原理是一樣的): http://cocoawithlove.com/2009/03/asteroids-style-game-in-coreanimation.html

+0

我編輯了這個問題,請閱讀它:) – 2012-02-06 15:38:16

1

也許你想要一個多步驟的過程。

首先,爲每個對象定義一個「中心」和「半徑」,使得圍繞所選半徑的中心繪製的線將完全包含沒有「太多額外」的對象。 (你可以定義你爲了防止「太多」而定義中心和半徑的難度。)

可選的下一步是以某種方式將屏幕劃分爲象限/節,並計算哪些對象(基於它們的中心和半徑)完全位於一個象限內,該象限跨越跨越4象限的象限邊界等。這允許您對下一步進行子集並且僅考慮處於相同象限中的對象對或者其中一個是一個跨越器排序或其他。

然後,在每對物體之間,使用畢達哥拉斯定理計算中心到中心的距離。如果這個距離小於兩個物體的半徑之和,那麼你就有可能發生碰撞。

最後,你必須在計算實際碰撞時沮喪和骯髒。有幾種不同的方法,取決於你的物體的形狀。顯然,圓圈被前面的步驟所覆蓋,正方形/矩形(與X/Y軸對齊)可以很好地計算,但奇怪的形狀更難。一種方案是,在一對「空白」畫布上繪製兩個對象,然後將這兩個對象逐像素地拼接在一起,看看你是否在任何地方都能找到1。這種方案有幾種變化。