重力方程 - 速度方程|为什么它只适用于某些FPS?

时间:2012-11-17 22:21:01

标签: java gravity

随着每秒更新量的下降,这些方程式的跳跃大小会减小。使用delta值乘以重力和跳跃力减少的量,以及每次迭代时delta增加的时间(delta值是自上次更新以来经过的毫秒数),人们会认为它可以正常工作。 / p>

//d is delta
...
if(isFalling||isJumping){

        elapsedTime +=d;
//the elapsed time is the total amount of time passed since one started jumping,
//so that's logical to add the amount of time since last update.

        long tesquared = (long) Math.pow(elapsedTime, 2);
//amount of time elapsed squared.

        jumpSpeed+=-0.0000005*elapsedTime*d;
//this is the amount that jumpspeed is taken down by every time. 

        if(jumpSpeed > 0){
            isJumping = true;
        } else {
            isJumping = false;
        }
        double fGravity = 0.0000001*tesquared*d;

// this is the equation for gravity, the amount that the player goes down

        yRend += jumpSpeed - fGravity;
    //the amount it goes up, minus the amount it goes down.
        xRend -= strafeSpeed;
        oldyRend = yRend;

    }

要开始跳跃,可以添加任意数量的jumpSpeed。

问题在于,当每秒的更新量减少时,跳跃的持续时间和数量会减少。我很确定这里的delta值很好,这意味着问题必须在方程本身。

我认为当delta更大时,fGravity会更快地超越jumpSpeed

所以我的问题。如果问题确实存在于方程本身中,那么模拟玩家向上力量减去向下重力的正确方法是什么

jumpSpeed+=-0.0000005*elapsedTime*d;

double fGravity = 0.0000001*tesquared*d;

如果问题是delta值未正确应用,那么应用它的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

玩家没有“向上的力量”(除了他们跳跃的那一点)。强制传递动量生成速度。一旦在空中,他们确实感觉到向下力(即重力),这会使它们减速,最终产生负速度,使它们返回地面。

如果玩家开始以速度u向上跳跃,那么在该跳跃开始后的t时间,用于计算位置的经典等式为y = ut + 0.5 * at^2

在这种情况下,a是引力(如果y为“up”则为负数),给出y = u * t - 0.5 * g * t ^ 2

答案 1 :(得分:1)

基本上,跳跃的等式就是这样:

重力垂直施加并向下产生恒定的力。所以垂直速度是vy = vy0 - elapsedTime * g,其中g是重力常数,vy0是跳跃开始时的初始速度。

您无需计算经过的时间。只需在每一帧,你都可以这样做:

vy -= g * dt; // dt is the elapsed time since last frame

y += vy * dt;
x += vx * dt; // vx doesn't change in the jump