Java - 回合玩家转向

Java - Round Player Turning

我正在制作一款游戏,我让玩家移动,但是当玩家以对角线转向时(例如,向上,然后向右上方),它并不像我想要的那样流畅。 这是显示问题的图片:

玩家路线表示玩家的路径。 我怎样才能达到这个效果?

我正在考虑是否可以生成贝塞尔曲线供玩家跟随,但我不知道如何让玩家跟随它。

您使用贝塞尔曲线的假设是正确的。我建议(如果您还没有的话)编写一个 Update 方法,用于在 frame-by-frame 的基础上控制玩家的移动。换一种说法;一种在单独的线程中运行并触发要沿曲线移动的玩家的位置更新的方法。它将充当队列,仅在给定的时间过去后才执行移动等。

至于如何让玩家沿着曲线移动,我会沿着曲线计算多个点,比如说每条曲线 25 个点。每个点都有,点到下一个点。这些将像 waypoints - 玩家被指示在短时间内移动到下一个航路点。因此,如果您想在 5 秒内沿着整条曲线移动您的玩家,则玩家需要每 0.2 秒 'jump' 从一个路径点到另一个路径点。

如果您希望运动更小 'jerking',您需要编写线性插值,这实际上会进一步计算每条曲线 waypoints 之间更小的 waypoints 划分.

对于上述项目,您可以找到许多有用的方法,here

在下图中,蓝色斑点是 waypoints。


另一种(更简单的)曲线方法

另一种使用贝塞尔曲线的方法是做一条非常简单的平滑曲线:在右转的情况下;从两个值开始 - Xfactor = 0 和 Yfactor = 10。对于这个例子,我假设曲线周围的移动速度是 10 个单位(例如它可以是像素)。对于每一帧,您将 Xfactor 和 Yfactor 添加到玩家的当前位置。您还可以从 Y 因子中减去一个常数(假设为 0.5 个单位)并将其添加到 X 因子中。您继续前进,直到 Xfactor 等于 10 并且 Yfactor 等于 0。这应该会导致玩家 'move' 通过 90 度。为了让玩家移动 45 度,您将继续前进直到 Xfactor 等于 5,因为这将是 10 的一半。为了让玩家朝那个方向移动,您需要继续将 Xfactor 和 Yfactor 添加到每个 frame/update 上的玩家位置。 同样,为了让玩家转弯,您可以随时间改变 Xfactor 和 Yfactor。