控制 physicsBody 的速度不超过特定值

Controlling physicsBody's velocities from exceeding certain values

我有 3 个 NPC,每个 NPC 都有自己的圆形 physicsBody,旨在模拟零重力下的弹力球 - 更准确地说,弹力球永远不会因为恢复 = 1.0 而停止移动; (弹性 100%)摩擦力 = 0.0; (无摩擦)linearDampening = 0.0; (碰撞不会影响 NPC)。如果这些 NPC 中的任何一个 collide/contact 与另一个 NPC 在一起,那么它们的速度就会增加。它们开始移动得如此之快,以至于它开始迫使水平 boundaries/physicsBodies(据说是非动态的)实际上受到影响 shift/move。下面是我在更新方法中写的 if 语句,以控制这 3 个 NPC 的 physicsBody.velocities。有人可以看看并告诉我是否有更好的方法吗?我基本上想限制所有 3 个 NPC 在任何时候都不能超过的最大 velocities/moving 速度。

-(void)update:(CFTimeInterval)currentTime
{
    /* Called before each frame is rendered */


    //Track ball velocities.
    if (_npcRed.physicsBody.velocity.dx > 1000 || _npcRed.physicsBody.velocity.dy > 1000)
    {
        NSLog(@"RED's moving too fast; lowering velocity");
        _npcRed.physicsBody.velocity = CGVectorMake(500, 500);
    }
    else
    {
        NSLog(@"RED's at stable speed");
    }
    if (_npcBlue.physicsBody.velocity.dx > 1000 || _npcBlue.physicsBody.velocity.dy > 1000)
    {
        NSLog(@"BLUE's moving too fast; lowering velocity");
        _npcBlue.physicsBody.velocity = CGVectorMake(500, 500);
    }
    else
    {
        NSLog(@"BLUE's at stable speed");
    }
    if (_npcGreen.physicsBody.velocity.dx > 1000 || _npcGreen.physicsBody.velocity.dy > 1000)
    {
        NSLog(@"GREEN's moving too fast; lowering velocity");
        _npcGreen.physicsBody.velocity = CGVectorMake(500, 500);
    }
    else
    {
        NSLog(@"GREEN's at stable speed");
    }
}

除了两件事,你所做的一切都很好。你的 if 语句

if (_npcBlue.physicsBody.velocity.dx > 1000 || _npcBlue.physicsBody.velocity.dy > 1000)
    _npcBlue.physicsBody.velocity = CGVectorMake(500, 500);

如果 dx 或 dy 速度大于 1000,则设置为开火。如果 npcBlue 的 dx 速度为 100,dy 速度为 1010 会怎么样。npcBlue 的 dx 速度从 100 跳到 500。不太好。

其次,为什么dx和dy节流在1000然后设置为500?那会使运动非常不稳定。为什么不检查 dx 或 dy 是否大于 500,如果是,则设置为 500?