Java 如何创建平滑的摄影机跟随算法?

Java 如何创建平滑的摄影机跟随算法?,java,opengl,2d,libgdx,smooth-scrolling,Java,Opengl,2d,Libgdx,Smooth Scrolling,我正在用LibGDX(Java)制作一个游戏 我需要摄像机跟踪一个快速移动的角色。最简单的方法就是这样写: this.getCamera().position.set(obj.x, obj.y, 0); 但是,有什么算法可以让这变得更平滑吗?比如说,当相机不是很严格,总是有点晚:角色向右快速移动,相机跟随稍有延迟,或者如果你突然出现在某个很远的地方,相机不会立即传送,而是以最高速度向你移动,当它靠近你时,它会减慢一点,然后再次找到你 有没有任何libgdx libs可以做到这一点,或者有人有过

我正在用LibGDX(Java)制作一个游戏

我需要摄像机跟踪一个快速移动的角色。最简单的方法就是这样写:

this.getCamera().position.set(obj.x, obj.y, 0);
但是,有什么算法可以让这变得更平滑吗?比如说,当相机不是很严格,总是有点晚:角色向右快速移动,相机跟随稍有延迟,或者如果你突然出现在某个很远的地方,相机不会立即传送,而是以最高速度向你移动,当它靠近你时,它会减慢一点,然后再次找到你


有没有任何libgdx libs可以做到这一点,或者有人有过这样的经历?

看看奥雷利昂·里本的。这执行插值,并有几个缓和方程,我认为会得到你想要的。它还具有其他高级功能,如指路和将某些动作链接在一起以获得其他有趣的效果


你的游戏逻辑可以检查角色是否移动迅速,或者在位置上是否有阶跃变化。作为回应,将您当前的相机位置切换到tween引擎,让它接管——平滑地缩放到角色的当前位置。

尝试一些简单的方法,例如缩小十分之一的距离。它工作得出奇地好

float lerp = 0.1f;
Vector3 position = this.getCamera().position;
position.x += (Obj.x - position.x) * lerp * deltaTime;
position.y += (Obj.y - position.y) * lerp * deltaTime;

“但是,有什么算法可以让这更平滑吗?”你有没有自己尝试过算法,或者在谷歌上搜索过平滑摄影机插值之类的东西?我自己尝试过,有几个工作示例,但我不太喜欢结果,我很好奇是否有什么东西已经解决了,因为它听起来像是任何游戏开发人员都需要的东西,关于谷歌搜索,我不确定搜索什么,它带来了大量的其他东西。建议:还可以乘以增量时间,使运动独立于帧率。只是为了记录(我意识到这是很久以前的事了)不,您不想使用tween引擎来实现这一点,因为游戏角色总是在移动,并且容易发生用户控制的方向变化。启动和杀死Tween的开销毫无意义。只需在upd(增量)调用中使用上面的lerp算法。也就是说,UTE用户界面对于其他类似的转换,甚至对于移动相机,而不是跟随游戏中的主要角色来说,都是非常优秀的。我不同意。虽然我还没有做一个时间分析,但两人是合二为一的,所以出发和杀戮的影响应该是最小的。分配一个新的tween只是一组分配,而杀死tween同样只是将对象返回到池中。我在一个游戏中使用了这种方法来帮助平滑摄影机的运动,而不是直接锁定角色,而不会对性能造成明显影响。摄像机没有发出刺耳的动作,而是懒洋洋地跟随着看得更好看的球员。