我正在构建一个LibGDX游戏,需要放大和缩小相机。但是,当我camera.zoom = 1.2f;
时,它只会“跳跃”。达到那个价值。相反,我希望有一个平滑的缩放。
我的问题: 什么是平滑缩放的最佳方式?
我想像下图这样放大。 y=0
是开始cam.zoom
,y=100
是期望的cam.zoom
,x轴显示时间。
我应该使用cam.zoom = f(time);
吗? (对f(x)
进行了一些修改)
time
是自缩放开始以来经过的总时间。
或者使用它是否更好:
cam.zoom += (desiredZoom - cam.zoom) * delta * scalar;
delta
是两帧之间的时间,而scalar
是一个浮点数,将调整以设置速度。
或者还有另一种更好的方法吗?你觉得怎么样?
非常感谢!
答案 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
增加进度值以更快地更改或降低速度以减慢值的变化。