就像在一個馬里奧遊戲中,如果你跳躍並着陸在頂部的怪物,怪物會被擊倒。我在兩個對象(玩家和怪物)之間使用CGRectIntersectsRect;然而,怪物會從任何方向被擊倒。CGRectIntersectsRect在對象的特定點上?
我該如何相交兩個對象特定點的對象?
我實際上在每個方向上創建了單獨的空白對象以使其工作。有沒有更有效的解決方案?
就像在一個馬里奧遊戲中,如果你跳躍並着陸在頂部的怪物,怪物會被擊倒。我在兩個對象(玩家和怪物)之間使用CGRectIntersectsRect;然而,怪物會從任何方向被擊倒。CGRectIntersectsRect在對象的特定點上?
我該如何相交兩個對象特定點的對象?
我實際上在每個方向上創建了單獨的空白對象以使其工作。有沒有更有效的解決方案?
而不是CGRectIntersectsRect
您可以使用CGRectIntersection
獲得交叉區域的新CGRect
。如果玩家從側面擊中,那麼這個矩形將比寬度更高。如果玩家從頂部擊中矩形會比高度更寬,但是您可能需要檢查頂部與底部。在這種情況下,您可以比較敵方矩形的Y值與交叉點。如果玩家從頂部擊中,交叉口的Y值和敵方矩形的Y值相等。否則,玩家從底部擊中。
typedef NS_ENUM(NSUInteger, IntersectFrom) {
IntersectFromNotIntersect,
IntersectFromTop,
IntersectFromBottom,
IntersectFromLeft,
IntersectFromRight
};
IntersectFrom CGRectGetIntersectFrom(CGRect rectPlayer, CGRect rectMonster) {
CGRect rectIntersect = CGRectIntersection(rectPlayer, rectMonster);
if(!CGRectIsNull(rectIntersect)) {
if(CGRectGetWidth(rectIntersect) < CGRectGetHeight(rectIntersect)) {
// LEFT or RIGHT
if(CGRectGetMinX(rectIntersect) == CGRectGetMinX(rectMonster)) {
return IntersectFromLeft;
}
else {
return IntersectFromRight;
}
}
else {
// TOP or BOTTOM
if(CGRectGetMinY(rectIntersect) == CGRectGetMinY(rectMonster)) {
return IntersectFromBottom;
}
else {
return IntersectFromTop;
}
}
}
else {
return IntersectFromNotIntersect;
}
}
您可以使用sprite套件的內置接觸檢測功能 – 0x141E 2014-10-17 04:50:18
我查了一下spritekit指南,它有我需要的信息。謝謝。 – dendritic 2014-10-17 15:59:21