我有一个精灵,我想要顺利旋转并面向相反的方向:
这是我的渲染功能:
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();
}
我的代码所做的是当它到达目的地(右上角或左下角)时,它立即朝向相反的方向转动。我怎样才能顺利完成这个转变呢?
答案 0 :(得分:0)
我认为“平稳”对你来说意味着当到达边界时转弯方向不会直接翻转,而是应该直接停止并在一段时间内加速。
因此,请使用三个浮点值而不是rotDeg
:currentRotation
,rotationStep
和maxRotation
。通过它们,您可以建立平滑的加速度模型:
您在每次渲染通话中都会调用bug.rotate(currentRotation)
。到达边界时,请设置currentRotation = 0
。现在,每当您bug.rotate()
currentRotation
rotationStep
currentRotation < maxRotation
|currentRotation| < maxRotation
currentrotation
,{} {}您必须根据应用程序的速度为它们搜索适当的值。
如果你想让你的bug稍微淡出屏幕,意味着不立即停止旋转,请使用另一个标志,指示在rotationStep
的情况下旋转速度是增加还是减少。根据此标志,{{1}}递增或递减{{1}}。这将使边框感觉像用户的橡胶,精灵淡入,停止并平稳地加速。