2014-03-12 62 views
0

我目前正在xcode中使用遊戲。我唯一的問題是我有複雜的圖像,我只想要在圖像相互接觸而不是實際的邊界框時檢測到碰撞。有沒有什麼辦法可以找到一種方法來在沒有CGRectIntersectsRect的非矩形,複雜圖像之間進行碰撞檢測。沒有CGRectIntersectsRect的碰撞

如果有人能幫助它將不勝感激。

+0

你使用什麼框架?它是Spritekit嗎? – Greg

+0

不,我一直在這個項目上關閉一段時間,並在sprite套件出來之前就開始了。 –

+1

那是什麼?你只使用UI元素,例如UIImageView作爲精靈?或者也許Cocos2d? – Greg

回答

0

我會建議使用較小的CGRect,從左/右和頂部/底部邊緣減去一些偏移量並使用CGRectIntersectRect。 您還可以檢查被點與矩形互動:

UIImageView *sprite = //Your sprite; 
CGPoint point = CGPointMake(5,5); 
BOOL isPointInsideSprite = [sprite pointInside:point withEvent:nil]; 

第二種解決方案是更昂貴,但更精確。

0

呃...好的,你要的東西很難。

要檢查兩個圖像碰撞,你可以渲染一個圖像與其他圖像的阿爾法遮掩,然後檢查圖像是完全透明的......但是這緩慢和碰撞檢測必須快速

碰撞檢測(模型級別的東西)依賴於您使用的精靈(視圖級別的東西)也有點奇怪。您更新藝術風格,突然間遊戲變得更加困難!

因此,大多數遊戲甚至3D遊戲都使用更簡單的形狀來執行命中檢測。圓形和矩形的碰撞可以比任意位圖計算得更有效,所以如果你定義了一個好的邊界框(可以是矩形或圓形或其他),你可以獲得更好的性能。

現在...如果你真的需要一個奇怪的形狀,圓和矩形不夠好的近似值?那麼,你可以定義任意的多邊形相交算法......如果這真的是你需要用你的命中檢測的方式。但是你仍然想用抽象的形狀而不是圖像來表示命中檢測區域。如果這是您需要去的方式,那麼研究多邊形相交算法。