【问题标题】:Controlling physicsBody's velocities from exceeding certain values控制physicsBody的速度不超过某些值
【发布时间】:2015-03-13 15:31:17
【问题描述】:

我有 3 个 NPC,每个都有自己的圆形物理体,旨在模拟零重力下的弹力球 - 更准确地说,弹力球由于恢复原状而永不停止移动 = 1.0; (弹性 100%)摩擦力 = 0.0; (无摩擦)linearDampening = 0.0; (碰撞不会影响 NPC)。如果这些 NPC 中的任何一个与另一个 NPC 发生碰撞/接触,则它们的速度会增加。它们开始移动得如此之快,以至于它开始迫使水平边界/物理体(据说是非动态的)实际上从冲击中移动/移动。以下是我在更新方法中编写的 if 语句,以控制这 3 个 NPC 的物理体速度。有人可以看看并告诉我是否有更好的方法吗?我基本上希望所有 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");
    }
}

【问题讨论】:

    标签: objective-c ios8 sprite-kit skphysicsbody


    【解决方案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?

    【讨论】:

    • 确实如此。谢谢。
    猜你喜欢
    • 2023-03-16
    • 2021-08-12
    • 2016-05-03
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多