2014-02-23 63 views
0

我想知道2個圖像相撞的時間(而不僅僅是它們的幀數)。但這裏有一個問題:圖像旋轉。 所以我知道如何找到圖像中的像素是否透明,但在這種情況下不會有幫助,因爲它只能找到相對於非旋轉圖像的幀中的位置。 此外,我儘可能嘗試打框,但即使這些不會工作,因爲我無法找到一種方法來檢測包含在不同子視圖中的UIViews的碰撞。用於旋轉圖像的碰撞檢測

我試圖做甚至可能嗎? 在此先感謝

+0

你的意思是你將imageView1和imageView2添加到了一些帶有不同框架的mainView並旋轉它們。現在你想知道它們是否相交。 (像imageView1的任何部分與view2重疊? – santhu

+0

是的,正是任何建議嗎? – user2705768

+1

我已經回答了類似的問題。隨時檢查它http://stackoverflow.com/questions/21758271/detecting-collisions-between-rotated -uiviews/21802849#21802849希望它有幫助 – santhu

回答

1

我不知道你將如何去旋轉後的圖像上檢查像素衝突。那會很難。我認爲你必須將旋轉的圖像渲染到上下文中,然後從上下文中獲取像素來檢查透明度。那會非常慢。

我會建議一種不同的方法。想出一條可以映射不規則圖像邊界的路徑。然後,您可以使用CGPathContainsPoint檢查路徑中是否包含一組點(該方法需要一個轉換,您將使用該轉換來描述圖像路徑的旋轉)。

即使這樣,儘管您會出現性能問題,因爲您必須從其他圖像中調用大量點來確定它們是否相交。

0

我建議你一個簡單的策略來解決這個問題,基於尋找矩形十字路口。

關鍵在於創建一個簡單的圖像表示形式,其中一組矩形正確地作爲圖像不同部分的邊界框來佈置(就像您使用legos構建圖像一樣)。爲了獲得更好的性能,請使用一小組矩形(一些大的legos),爲了獲得更好的精度,請使用最大數量的矩形來精確跟蹤圖像輪廓。

您的問題等同於找到矩形之間的交集。或者更確切地說,找到對象A的矩形的至少一個頂點位於對象B(CGRectContainsPoint)的至少一個矩形內,或者如果矩形相交(CGRectIntersectsRect)。

如果你更喜歡點查找,你應該通過它們的4個頂點定義你的矩形,然後當你旋轉你的圖像來應用相同的仿射變換(使用CGPointApplyAffineTransform)到你的矩形頂點以獲得點的座標旋轉後。但是,當然,您可以使用標準的CGRect結構查找框架交點並表示矩形。

你也可以使用一個CGPath(如下另一個答案解釋),而不是一組矩形,尋找使用CGPathContainsPoint其他路徑內的任何頂點。這實際上會給出相同的結果,但在許多情況下矩形方法可能更快。

唯一的技巧是將其中一個對象作爲參考軸。想象一下,你在對象A上,而你只能看到B在你身邊移動。然後,如果您必須旋轉A,則需要進行軸變換,以使B始終相對於A變換,而不是變換到屏幕或任何其他參考。如果您的變換僅在物體中心附近旋轉,那麼將A旋轉n弧度相當於將B旋轉-n弧度。

然後只是循環遍歷定義對象A的頂點,並查找是否在對象A的矩形內。

您可能需要調查一下才能做到這一點,但至少您有一些關於如何解決這個問題的線索。