2010-04-09 68 views
1

我有一個很長的矩形圖像,它以不同角度旋轉。然而,矩形圖像的框架不隨圖像一起旋轉,而是通過旋轉使框架變大以適應旋轉後的圖像。因此,當我使用CGRectIntersectsRect時,碰撞檢測完全關閉,因爲與矩形圖像碰撞的其他圖像在它到達矩形圖像的可見區域之前將發生碰撞。 如果你真的不知道我在說什麼,看看在ASCII圖紙:使用CGRectIntersectsRect進行碰撞檢測

正常矩形圖像幀,O- - >像素,|, - - >幀

|----------| 
|OOOOOOOOOO| 
|----------| 

旋轉

|----------| 
|O   | 
| O  | 
| O  | 
| O  | 
| O  | 
|  O | 
|  O | 
|  O | 
|  O | 
|----------| 

後,我已經經歷了一些碰撞文章的閱讀,但所有的人都用正常的直線矩形談論碰撞和我真正想要的是碰撞傾斜圖像,最好像素的碰撞檢測。 TIA提出任何建議。

+0

這將被稱爲OBB(定向邊框)碰撞 - http://www.google.co.uk/search?q=obb+collision – 2010-04-09 08:24:38

回答

1

如果您使用的是mac,則可以使用-[NSImage hitTestRect:withImageDestinationRect:context:hints:flipped:]來確定特定的矩形是否與圖像中的非透明像素相交。查看使用的標題註釋。

+0

我發現它在文檔中,但我似乎無法使用它。 我的自動完成句子在hitTest處停止,並且沒有hitTestRect。使用google搜索它,但返回沒有有用的信息 – Treon 2010-04-09 07:11:13

+0

查看標題。 NSImage.h。 – Ken 2010-12-02 20:25:40

0

您不能使用的frame屬性在旋轉對象上執行衝突,因爲只要開始變換視圖,frame就不再有效。您需要想出一些自定義解決方案。究竟是什麼取決於很多事情,尤其是性能。

您可以爲圖像創建一個幾何碰撞包絡,一個可以隨圖像旋轉的多邊形。或者,您可以將像素完美的碰撞檢測與簡單的邊界檢查相結合,以儘可能避免昂貴的像素檢查。而且,如果你真的想要看上,你可以使用一些全功能的物理模擬器,如Box2D

如果你想要更好的建議,請給我們更多的細節。你需要多久檢查一次碰撞?一旦?每秒40次?

+0

我真的有更多的細節,我現在可以給你。我的主要目的是檢測CGrect和旋轉的矩形圖像之間的碰撞。由於CGRectIntersectRect在這種情況下不起作用,所以我得看看你的建議 – Treon 2010-04-09 07:59:20