SpriteKit动态Body如何通过StaticBody进行隧道传输?

时间:2015-07-24 14:50:52

标签: objective-c sprite-kit skphysicsbody tunneling

嗨,我在SpriteKit游戏中得到了一个奇怪的效果。

屏幕周围有一堵墙, 我使用staticbody创建了bodyWithEdgeLoopFromRect

通过skView.showsPhysics = YES;,屏幕上也会显示所有实体。

我在屏幕上有一个球。哪个有dynamic body。 有时当我提供Force球时,它会传递给那个静止墙!

这怎么可能?

虽然我可以在屏幕上看到两个身体,但动态球有时会穿过静止墙。

我还为usesPreciseCollisionDetection = YES;提供了physics bodies属性。 但它并没有阻止这个问题。

如何防止此问题?

1 个答案:

答案 0 :(得分:1)

当物体的速度非常高时会发生这种情况。例如,如果您的球对象每帧以X + 300的速度行进,那么它很可能无法检测到“墙”并移过它。

如果速度太高,将usesPreciseCollisionDetection设置为YES将无法解决此问题。

您应该对物体的速度应用速度限制。像这样:

if(self.physicsBody.velocity.dx > 100)
    self.physicsBody.velocity = CGVectorMake(100, self.physicsBody.velocity.dy);

以上限制了物体向右移动100,同时保持dy(向上和向下)速度不变。