我正在使用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(上/下)速度不变。
关于ios - SpriteKit-为什么我的弹跳球穿过地面?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29872718/