就像在马里奥游戏中一样,如果你跳跃并降落在怪物的顶部上,怪物就会被击倒。
我在两个对象(玩家和怪物)之间使用CGRectIntersectsRect;然而,怪物将从任何方向被击倒。
如何在对象的特定点处交叉两个对象?
我实际上在每个方向上创建了单独的空白对象,以便工作。有更有效的解决方案吗?
答案 0 :(得分:1)
您可以使用CGRectIntersectsRect
来获取交叉区域的新CGRectIntersection
,而不是CGRect
。如果玩家从侧面击中,那么这个矩形将比它宽。如果玩家从顶部击中,矩形将比它高,但你需要检查顶部与底部。在这种情况下,您可以将敌方矩形的Y值与交点进行比较。如果玩家从顶部击中,则交叉点和敌方矩形的Y值将相等。否则,玩家会从底部击中。
答案 1 :(得分: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;
}
}