在Y秒内加速到X速度

时间:2014-12-19 05:57:01

标签: c++ game-physics

如何在Y秒内获得从X到Xgoal速度的东西? goalVelocity设置为(100,100)并且确实接近它但是它需要太长时间才能到达那里。

我可以将frameDelta乘以某个数字,例如20或100,但我想知道将frameDelta乘以什么,以便在几秒钟内达到goalVelocity。< / p>

velocity,goalVelocity和origin都是Vec2f而frameDelta是float

现在我有了这段代码:

velocity = approach(goalVelocity, velocity, frameDelta);
origin = origin + velocity * frameDelta;

方法的代码是:

inline float approach(float flGoal, float flCurrent, float dt)
{
    float flDifference = flGoal - flCurrent;

    if (flDifference > dt)
        return flCurrent + dt;
    if (flDifference < -dt)
        return flCurrent - dt;

    return flGoal;
}

inline Vec2f approach(Vec2f flGoal, Vec2f flCurrent, float dt)
{
    return Vec2f(approach(flGoal.x, flCurrent.x, dt), approach(flGoal.y, flCurrent.y, dt));
}

2 个答案:

答案 0 :(得分:0)

也许我误解了你的问题,但加速只是速度差除以时间,所以只需将dt与X / Y相乘。

答案 1 :(得分:0)

基本的物理引擎应该看起来像

   Vec2f position, velocity, acceleration;

   while (true)
   {
     acceleration = button ? thrust : 0;
     velocity += acceleration * timeDelta;
     position += velocity * timeDelta
     redraw space ship at position;
     sleep (timeDelta);
   }

如果你想在Y秒内从0到X速度,那么thrust = X/Y