Libgdx - 减速弹停止,然后逆转它

时间:2014-07-16 02:01:58

标签: java android libgdx reverse

当在Libgdx中创建游戏时,我没有使用物理引擎,因为我在游戏中没有太多的移动部件。因此,为了让对象从屏幕顶部落到底部,我使用了文档所具有的内容,如下所示:

projectile.y -= 200 * Gdx.graphics.getDeltaTime();

这个例子将使所述抛射物以每秒200像素的速度下降(我相信)。我想要做的是在两秒钟之后这样做,射弹将从每秒200负转变为每秒200正。我尝试过使用循环和Thread.sleep,但这只会冻结整个游戏,并且射弹会以另一种方式解冻。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

线性插值。

您需要做的就是确定起点:x1 = -200

确定终点:x2 = 200

确定到达终点所需的秒数:tmax = 2.0秒

确定需要添加到原始图像以达到终点的差异:v =(x2-x1)=(200 - ( - 00))= 400

使用线性插值函数:x1 + t * v = x2其中t e [0 ... 1] //must be normalized to 0..1 interval

因此在t = 0时,该值为x1 + 0 = x1;在t =(tn / tmax)[为1]时,该值为x1 + v = x2。

所以你需要的是一个从0到2的计时器和以下等式:

float interpolationTimer = 0.0f;
final float interpolationTimerMax = 2.0f;

public void render()
{
    float delta = Gdx.graphics.getDeltaTime();
    interpolationTimer += delta;
    if(interpolationTimer > interpolationTimerMax )
    {
        interpolationTimer = interpolationTimerMax ;
    }
    velocity.y = -200 + (interpolationTimer/interpolationTimerMax) * (400); //x1 + t*v = x2
    projectile.y -= velocity.y * delta;
}

答案 1 :(得分:0)

要改变y的方向,需要x的多项式函数。对于单个方向更改,请使用二项式;尝试像

这样的东西
projectile.y = projectile.y 
    - 200 * Gdx.graphics.getDeltaTime() 
    + 20 * Math.pow(Gdx.graphics.getDeltaTime(), 2);

答案 2 :(得分:0)

如果您正在寻找速度的线性插值,只需跟踪时间。

float timeElapsed = 0.0f;

void render() {
    timeElapsed += Gdx.graphics.getDeltaTime();

    projectile.y -= 200.0f * (1.0f - timeElapsed);
}

确保在timeElapsed达到2秒后停止(如果(timeElapsed< 2.0f),则为#s; s)。时间流逝变量将从0.0f开始并将缓慢增加。直到它达到1.0f,projectile.y将从中减去。但是,一旦经过的时间高于1.0f,projectile.y就会被添加到。