在我的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);但是当节点跳得太快时,它会突然穿过其他本应是墙的节点。
但我该怎么做呢?
发布于 2014-01-26 18:18:08
与其施加武力,不如尝试施加一种冲动,以获得更即时的效果:
[_node.physicsBody applyImpulse:thrustVector];请记住,您使用的是基于节点当前速度的矢量,因此如果在此期间下降,则脉冲也会更小。
如果节点移动得太快,它可能会在呈现新帧之前完全通过另一个主体(墙),因此不会检测到冲突。有一个属性可以在这样快的物体上执行更昂贵的计算,_node.physicsBody.usesPreciseCollisionDetection = YES。
然而,即使这可能是不令人满意的,如果你达到极限速度。您可能需要实现一些手动检查,如果节点仍然在-(void)didSimulatePhysics方法中边缘墙的范围内。
https://stackoverflow.com/questions/21366289
复制相似问题