提高每个联系人的节点速度

时间:2014-01-26 16:47:28

标签: ios sprite-kit

didbeginContact内,我添加了以下代码:

// increase node speed on each contact
CGVector thrustVector = CGVectorMake(_node.physicsBody.velocity.dx+100,
                                     _node.physicsBody.velocity.dy+100);
[_node.physicsBody applyForce:thrustVector];

但它并没有在与其他节点的每次接触时提高速度。它应该为每个联系人反弹一点点(更多)。

我也尝试过:

// increase node speed on each contact
_node.physicsBody.restitution = _node.physicsBody.restitution + 0.001f;
NSLog(@"current node restitution: %f", _node.physicsBody.restitution);

但是当节点反弹太快时,它会突然通过其他节点,这些节点被认为是墙壁。

但我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

您可能希望尝试使用冲动来获得更直接的效果,而不是施加力:

[_node.physicsBody applyImpulse:thrustVector];

请记住,您正在使用基于节点当前速度的向量,因此如果在此期间下降,则冲量也会变小。

如果节点移动得太快,可能会在渲染新帧之前完全穿过另一个体(墙),因此不会检测到碰撞。有一个属性可以在这样快速的物体_node.physicsBody.usesPreciseCollisionDetection = YES上执行更昂贵的计算。

但是,如果达到极端速度,即使这可能也不会令人满意。如果节点仍在-(void)didSimulatePhysics方法的边墙范围内,您可能必须实施一些手动检查。