2014-10-17 31 views
1

就像在一個馬里奧遊戲中,如果你跳躍並着陸在頂部的怪物,怪物會被擊倒。我在兩個對象(玩家和怪物)之間使用CGRectIntersectsRect;然而,怪物會從任何方向被擊倒。CGRectIntersectsRect在對象的特定點上?

我該如何相交兩個對象特定點的對象?

我實際上在每個方向上創建了單獨的空白對象以使其工作。有沒有更有效的解決方案?

+1

您可以使用sprite套件的內置接觸檢測功能 – 0x141E 2014-10-17 04:50:18

+0

我查了一下spritekit指南,它有我需要的信息。謝謝。 – dendritic 2014-10-17 15:59:21

回答

1

而不是CGRectIntersectsRect您可以使用CGRectIntersection獲得交叉區域的新CGRect。如果玩家從側面擊中,那麼這個矩形將比寬度更高。如果玩家從頂部擊中矩形會比高度更寬,但是您可能需要檢查頂部與底部。在這種情況下,您可以比較敵方矩形的Y值與交叉點。如果玩家從頂部擊中,交叉口的Y值和敵方矩形的Y值相等。否則,玩家從底部擊中。

1
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; 
    } 
}