在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);
但是当节点反弹太快时,它会突然通过其他节点,这些节点被认为是墙壁。
但我该怎么做呢?
答案 0 :(得分:0)
您可能希望尝试使用冲动来获得更直接的效果,而不是施加力:
[_node.physicsBody applyImpulse:thrustVector];
请记住,您正在使用基于节点当前速度的向量,因此如果在此期间下降,则冲量也会变小。
如果节点移动得太快,可能会在渲染新帧之前完全穿过另一个体(墙),因此不会检测到碰撞。有一个属性可以在这样快速的物体_node.physicsBody.usesPreciseCollisionDetection = YES
上执行更昂贵的计算。
但是,如果达到极端速度,即使这可能也不会令人满意。如果节点仍在-(void)didSimulatePhysics
方法的边墙范围内,您可能必须实施一些手动检查。