我正在使用SpriteKit物理引擎进行小型弹跳球游戏。我的问题是:
当我在弹跳球上施加巨大的冲击使其快速落地时,有时它可能穿过地面(非常薄,高度= 2)。
我在Apple文档中找到了这个,但它不起作用。
为小型或快速移动的物体指定高精度碰撞 当Sprite Kit执行碰撞检测时,它首先确定场景中所有物理实体的位置。然后它确定是否发生了冲突或联系。这种计算方法很快,但有时会导致错过碰撞。一个小小的身体可能移动得如此之快,以至于它完全穿过另一个物理身体而没有动画帧,两者相互接触。
如果您有必须碰撞的物理实体,您可以提示Sprite Kit使用更精确的碰撞模型来检查交互。这种型号比较贵,所以应该谨慎使用。当任一机构使用精确碰撞时,会联系并测试多个移动位置,以确保检测到所有接触。
ship.physicsBody.usesPreciseCollisionDetection = YES;
答案 0 :(得分:3)
您可以设置精灵的node.physicsBody.usesPreciseCollisionDetection = YES;
,但这并不能保证一直存在碰撞标记,因为精灵的速度可能只是太高了。
您应该对节点应用速度限制,以防止它们过快。像这样:
if(node.physicsBody.velocity.dx > 200)
node.physicsBody.velocity = CGVectorMake(200, node.physicsBody.velocity.dy);
上面的代码示例将节点的右移动dx限制为200,同时保持dy(上/下)速度不变。