控制物理体的速度超过某些值

时间:2015-03-13 15:31:17

标签: objective-c ios8 sprite-kit skphysicsbody

我有3个NPC,每个人都拥有自己的圆形物理身体,意在模仿零重力的弹力球 - 更准确地说,弹性球由于恢复原因而永不停止移动= 1.0; (弹性100%)摩擦力= 0.0; (无摩擦)linearDampening = 0.0; (碰撞不会影响全国人大)。如果这些NPC中的任何一个与另一个NPC碰撞/接触,那么它们的速度会增加。它们开始移动得如此之快以至于它开始迫使水平边界/物理实体(这被认为是非动态的)实际上从影响中移位/移动。下面是我在更新方法中编写的if语句,以保持这3个NPC的physicsBody.velocities受到控制。有人可以看看并告诉我是否有更好的方法吗?我基本上希望所有3个NPC的最大速度/移动速度都有限,但它们不能超过它们。

-(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");
    }
}

1 个答案:

答案 0 :(得分:1)

除了两件事,你正在做的事情很好。你的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?