我有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)
{
}
我应该以某种方式使用它代码吗?谢谢你的帮助。
答案 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];