如何顺利放大LibGDX?

时间:2017-12-07 15:00:31

标签: java math libgdx

我正在构建一个LibGDX游戏,需要放大和缩小相机。但是,当我camera.zoom = 1.2f;时,它只会“跳跃”。达到那个价值。相反,我希望有一个平滑的缩放。

我的问题: 什么是平滑缩放的最佳方式?

我想像下图这样放大。 y=0是开始cam.zoomy=100是期​​望的cam.zoom,x轴显示时间。 Zoom graph

我应该使用cam.zoom = f(time);吗? (对f(x)进行了一些修改)

  

time是自缩放开始以来经过的总时间。

或者使用它是否更好:

cam.zoom += (desiredZoom - cam.zoom) * delta * scalar;
  

delta是两帧之间的时间,而scalar是一个浮点数,将调整以设置速度。

或者还有另一种更好的方法吗?你觉得怎么样?

非常感谢!

2 个答案:

答案 0 :(得分:0)

我知道最简单的方法是使用插值倒计时。

// member variables:
float timeToCameraZoomTarget, cameraZoomTarget, cameraZoomOrigin, cameraZoomDuration;

private float zoomTo (float newZoom, float duration){
    cameraZoomOrigin = camera.zoom;
    cameraZoomTarget = newZoom;
    timeToCameraZoomTarget = cameraZoomDuration = duration;
}

// in render():
if (timeToCameraZoomTarget >= 0){
    timeToCameraZoomTarget -= deltaTime;
    float progress = timeToCameraZoomTarget < 0 ? 1 : 1f - timeToCameraZoomTarget / cameraZoomDuration;
    camera.zoom = Interpolation.pow3out.apply(cameraZoomOrigin, cameraZoomTarget, progress);        
}

您可以使用任何功能pictured here替换Interpolation.pow3out

答案 1 :(得分:0)

您可以使用MathUtils。lerp方法。

示例:

false / TAKE_OFF / 1.512686825309134E9
false / LAND / 1.512687248764272E9

增加进度值以更快地更改或降低速度以减慢值的变化。