2014-01-29 36 views
-1
CGRect rect4 = CGRectMake(rock.position.x, rock.position.y, rock.size.width, rock.size.height); 
CGRect bulletRect = CGRectMake(bullet.position.x, bullet.position.y, bullet.size.width, bullet.size.height); 
if (CGRectIntersectsRect(bulletRect, rect4)) { 
    NSLog(@"hit Bullet"); 
    //[bullet removeFromParent]; 
} 

它似乎「擊中子彈」,即使直腸4沒有在子彈附近。 謝謝有沒有更準確的方法來查看兩個精靈是否相交?

+0

我們需要更多信息。子彈和岩石是否在同一座標系(節點)?子彈和搖滾是怎麼樣的? – yinkou

+1

岩石不是一個完美的盒子形狀,但是是一個不規則的多邊形形狀 – user3208783

回答

0

我不知道你的形狀究竟是怎樣的,但我的猜測是他們只是用一個矩形鬆散地象徵。

- 首先檢查你的x和y岩石和子彈的位置是否是他們的左上角座標,如果不考慮你的邊界矩形的平移。

- 爲了提高邊界形狀的精度,不會太複雜,您可以使用位於較小的矩形對象邊界上的點雲。然後,您將使用CGRectContainsPoint來檢查形狀是否相交。你應該把你的觀點放在多邊形邊界最突出的部分。你可以相對於rock.position.x和y座標獲得它們的座標。

例如:你知道你的岩石的x和y。你可以用類似的東西來定位一個點:p1 = x + dx,y + dy。

enter image description here

注意,在這裏,在沒有交集,一個典型的邊框方法會認爲這是一個路口的情況。

所以,在代碼:

CGPoint p1 = CGPointMake(rock.position.x+dx, rock.position.y+dy); 
CGRect bulletRect = CGRectMake(bullet.position.x, bullet.position.y, bullet.size.width, bullet.size.height); 
if (CGRectContainsPoint(bulletRect, p1)) { 
    NSLog(@"hit Bullet"); 
} 

當然,你有更多的點,更精確的將是。只要循環點數組,並且如果你有一個真正的數組,則返回break

另一種選擇,更爲複雜,精確的,可能是一個圖形引擎如Box2D

希望它幫助。

˚F


EDIT


Dx和Dy是您的已知點(rock.position.x,rock.position.y)和要測試的點之間的差異(P1這裏)。

dx and dy

+0

哇..謝謝非常花時間做到這一點!一個問題,什麼是「DX和DY」? – user3208783

+0

我編輯我的帖子來回答你的問題。 – Legisey

相關問題