嗨,我在SpriteKit
游戏中得到了一个奇怪的效果。
屏幕周围有一堵墙,
我使用staticbody
创建了bodyWithEdgeLoopFromRect
。
通过skView.showsPhysics = YES;
,屏幕上也会显示所有实体。
我在屏幕上有一个球。哪个有dynamic body
。
有时当我提供Force
球时,它会传递给那个静止墙!
这怎么可能?
虽然我可以在屏幕上看到两个身体,但动态球有时会穿过静止墙。
我还为usesPreciseCollisionDetection = YES;
提供了physics bodies
属性。
但它并没有阻止这个问题。
如何防止此问题?
答案 0 :(得分:1)
当物体的速度非常高时会发生这种情况。例如,如果您的球对象每帧以X + 300的速度行进,那么它很可能无法检测到“墙”并移过它。
如果速度太高,将usesPreciseCollisionDetection设置为YES将无法解决此问题。
您应该对物体的速度应用速度限制。像这样:
if(self.physicsBody.velocity.dx > 100)
self.physicsBody.velocity = CGVectorMake(100, self.physicsBody.velocity.dy);
以上限制了物体向右移动100,同时保持dy(向上和向下)速度不变。