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

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

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

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

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

如果你有碰撞的物理实体,你可以提示Sprite Kit使用更精确的碰撞模型来检查交互。 这个模型比较昂贵,所以应该谨慎使用它。 当任何一个身体使用精确的碰撞时,多个移动位置被接触并测试以确保所有接触被检测到。

ship.physicsBody.usesPreciseCollisionDetection = YES;


你可以设置你的精灵的node.physicsBody.usesPreciseCollisionDetection = YES; 但是这并不能保证所有时间都会出现碰撞标志,因为你的精灵速度可能太高了。

您应该对节点应用速度限制以防止它们变得过快。 像这样的东西:

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

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

链接地址: http://www.djcxy.com/p/66173.html

上一篇: Why my bouncing ball passes through the ground?

下一篇: Circular orbit formula is not working in unity 3D