如何在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));
}
答案 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
。