平滑放大LibGDX的方法?
Ways to smoothly zoom in LibGDX?
我正在构建一个 LibGDX 游戏,需要放大和缩小相机。但是当我做 camera.zoom = 1.2f;
时,它只是 'jumps' 到那个值。相反,我想要一个平滑的缩放。
我的问题:
平滑缩放的最佳方式是什么?
我想像下面这张图一样缩放。 y=0
是开始 cam.zoom
,y=100
是期望的 cam.zoom
,x 轴显示时间。
我应该使用 cam.zoom = f(time);
吗? (对 f(x)
进行了一些修改)
time
is the total time passed since the beginning of the zoom.
还是更好用:
cam.zoom += (desiredZoom - cam.zoom) * delta * scalar;
delta
is the time between two frames and
scalar
is a float that will be adjusted in order to set the speed.
或者还有其他更好的方法吗?你怎么看?
非常感谢!
我知道的最简单的方法是使用带插值的倒计时。
// 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);
}
您可以将 Interpolation.pow3out
替换为任何函数 pictured here。
您可以使用 MathUtils.lerp 方法。
示例:
MathUtils.lerp(currentZoom,targetZoom,progress);
增加进度值以变快或降低以减慢值变化的速度。
我正在构建一个 LibGDX 游戏,需要放大和缩小相机。但是当我做 camera.zoom = 1.2f;
时,它只是 'jumps' 到那个值。相反,我想要一个平滑的缩放。
我的问题: 平滑缩放的最佳方式是什么?
我想像下面这张图一样缩放。 y=0
是开始 cam.zoom
,y=100
是期望的 cam.zoom
,x 轴显示时间。
我应该使用 cam.zoom = f(time);
吗? (对 f(x)
进行了一些修改)
time
is the total time passed since the beginning of the zoom.
还是更好用:
cam.zoom += (desiredZoom - cam.zoom) * delta * scalar;
delta
is the time between two frames and
scalar
is a float that will be adjusted in order to set the speed.
或者还有其他更好的方法吗?你怎么看?
非常感谢!
我知道的最简单的方法是使用带插值的倒计时。
// 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);
}
您可以将 Interpolation.pow3out
替换为任何函数 pictured here。
您可以使用 MathUtils.lerp 方法。
示例:
MathUtils.lerp(currentZoom,targetZoom,progress);
增加进度值以变快或降低以减慢值变化的速度。