精灵旋转顺利

时间:2014-11-01 19:09:56

标签: java libgdx

我有一个精灵,我想要顺利旋转并面向相反的方向:

这是我的渲染功能:

public void render() {

    Gdx.gl.glClearColor(0.7f, 0.7f, 0.2f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    spriteBatch.begin();        

    if(bug.getX() >= (int)(Gdx.graphics.getWidth() - 100) && bug.getY() >= (int)(Gdx.graphics.getHeight() - 100)){
        bug.rotate(rotDeg);
        turn = !turn;
    }
    else if(bug.getX() <= 0 && bug.getY() <= 0){
        bug.rotate(rotDeg);
        turn = !turn;
    }

    if(!turn){          
        bug.translate(v.x * Gdx.graphics.getDeltaTime(), v.y * Gdx.graphics.getDeltaTime());
    }
    else{
        bug.translate(-(v.x * Gdx.graphics.getDeltaTime()), -(v.y * Gdx.graphics.getDeltaTime()));
    }


    bug.draw(spriteBatch);
    spriteBatch.end();
}

我的代码所做的是当它到达目的地(右上角或左下角)时,它立即朝向相反的方向转动。我怎样才能顺利完成这个转变呢?

1 个答案:

答案 0 :(得分:0)

我认为“平稳”对你来说意味着当到达边界时转弯方向不会直接翻转,而是应该直接停止并在一段时间内加速。

因此,请使用三个浮点值而不是rotDegcurrentRotationrotationStepmaxRotation。通过它们,您可以建立平滑的加速度模型:

您在每次渲染通话中都会调用bug.rotate(currentRotation)。到达边界时,请设置currentRotation = 0。现在,每当您bug.rotate() currentRotation rotationStep currentRotation < maxRotation |currentRotation| < maxRotation currentrotation,{} {}您必须根据应用程序的速度为它们搜索适当的值。

如果你想让你的bug稍微淡出屏幕,意味着不立即停止旋转,请使用另一个标志,指示在rotationStep的情况下旋转速度是增加还是减少。根据此标志,{{1}}递增或递减{{1}}。这将使边框感觉像用户的橡胶,精灵淡入,停止并平稳地加速。