【问题标题】:LibGDX: Camera lerp shakes when approaching targetLibGDX:接近目标时相机抖动
【发布时间】:2016-11-17 23:21:58
【问题描述】:

我正在使用使用 ScreenViewport 的正交相机,“UnitsPerPixel”设置为 0.333f,当我移动播放然后停止时,相机按预期追上,但随后开始轻微晃动并在靠近时表现怪异(在最后几个像素)。我只是在使用基本的 lerp: cam.position.lerp(new Vector3(entityToFocusOn.getLocation().getX() + ArchipeloClient.PLAYER_SIZE / 2, entityToFocusOn.getLocation().getY() + ArchipeloClient.PLAYER_SIZE / 2, 0), deltatime);

这是它的样子:

另一个:

总体来说,不是很流畅。

附:通常它比那个 gif 中的要糟糕得多。

【问题讨论】:

  • 绘图时将字符位置四舍五入到最接近的整数。
  • 这解决了播放器轻微移动的问题,但没有解决相机抖动问题,但看起来确实好一些。谢谢。
  • @Tenfour04 这不会解决它,因为 lerp 本身没有四舍五入到最接近的整数......这就是它在颤抖的原因。
  • @Hasan 它修复了角色与周围环境不同步的问题,但你是对的。在 lerping 之后,相机位置也需要四舍五入到最接近的游戏内像素大小的倍数。

标签: libgdx viewport orthographic linear-interpolation lerp


【解决方案1】:

这是因为您无限期地在摄像机位置和玩家位置之间进行插值。解决此问题的一种快速方法是设置相机捕捉到玩家的阈值。

所以if distance is less than x then snap to player position and stop lerping。这样它就不会做微小的微动。

另一种解决方案是在您调整相机位置后将其调整为屏幕单位。有时这可能就像四舍五入到最接近的整数一样简单,但有时您必须考虑缩放。

【讨论】:

  • 我最终完全消除了 lerping,但我记得尝试过这个解决方案并且“捕捉”总是很明显,即使 epsilon 测试距离很短。
  • 这并不能解决问题。如果你过早地拥有播放器的快照,它看起来真的很虚假,但如果你必须晚于它,它仍然会摇摆不定。问题是 lerp 本身没有四舍五入到精确的像素......但似乎没有任何方法可以解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多