SpriteKit碰撞跳跃

时间:2014-04-13 10:37:12

标签: collision-detection sprite-kit touchesbegan

我有2个物体,一个人类和一个块。如果人类在街区,他可以跳, 如果他在空中,他就不是。我该怎么编码,因为CGRectIntersectsRect对我来说在SpriteKit中不起作用。

- (void)touchesBegan:(NSSet *)触及withEvent:(UIEvent )event {     / 触摸开始时调用* /

Human.physicsBody.velocity = CGVectorMake(0, 0);

[Human.physicsBody applyImpulse:CGVectorMake(0, 40)];

}

我已经在分类中使用Block和Human,用于碰撞检测:

else if ((firstBody.categoryBitMask & HumanCategory) != 0 &&
         (secondBody.categoryBitMask & BlockCategory) != 0)
{

}

我应该以某种方式使用它代码吗?谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

在我的游戏中,我使用intersectsNode来确定两个节点是否相交:

if ( [node1 intersectsNode:node2] )

希望这有帮助

答案 1 :(得分:0)

为防止在不接触地面时跳跃,请使用bodyAtPoint:检测节点下是否有任何物理机构。

如果您的角色下可能存在多个可能不相关的物理实体,您可以使用enumerateBodiesAtPoint:usingBlock:确保仅在物理实体关联节点为块时允许跳跃。

<强>更新

这些方法可以在SKPhysicsWorld类中找到,您可以通过场景中的physicsWorld属性访问实例。

//Please note that this point is in the scenes coordinate system
CGPoint thePointDirectlyBelowMyNode = ...;
[scene.physicWorld bodyAtPoint:thePointDirectlyBelowMyNode];

答案 2 :(得分:0)

实际上,方法是- (SKNode *)nodeAtPoint:(CGPoint)p;
所以请使用[self nodeAtPoint: pointBelowHuman];