SpriteKit - 为什么我的弹跳球穿过地面?

时间:2015-04-26 01:37:15

标签: ios sprite-kit collision-detection game-physics

我正在使用SpriteKit物理引擎进行小型弹跳球游戏。我的问题是:

当我在弹跳球上施加巨大的冲击使其快速落地时,有时它可能穿过地面(非常薄,高度= 2)。

我在Apple文档中找到了这个,但它不起作用。

  

为小型或快速移动的物体指定高精度碰撞   当Sprite Kit执行碰撞检测时,它首先确定场景中所有物理实体的位置。然后它确定是否发生了冲突或联系。这种计算方法很快,但有时会导致错过碰撞。一个小小的身体可能移动得如此之快,以至于它完全穿过另一个物理身体而没有动画帧,两者相互接触。

     

如果您有必须碰撞的物理实体,您可以提示Sprite Kit使用更精确的碰撞模型来检查交互。这种型号比较贵,所以应该谨慎使用。当任一机构使用精确碰撞时,会联系并测试多个移动位置,以确保检测到所有接触。

     

ship.physicsBody.usesPreciseCollisionDetection = YES;

1 个答案:

答案 0 :(得分:3)

您可以设置精灵的node.physicsBody.usesPreciseCollisionDetection = YES;,但这并不能保证一直存在碰撞标记,因为精灵的速度可能只是太高了。

您应该对节点应用速度限制,以防止它们过快。像这样:

if(node.physicsBody.velocity.dx > 200)
    node.physicsBody.velocity = CGVectorMake(200, node.physicsBody.velocity.dy);

上面的代码示例将节点的右移动dx限制为200,同时保持dy(上/下)速度不变。