Java - Round Player Turning

时间:2016-01-17 17:56:56

标签: java path curve

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

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

我在考虑为玩家制作一条贝塞尔曲线,但我不知道如何让玩家跟随它。

1 个答案:

答案 0 :(得分:2)

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

至于如何让玩家沿着曲线移动,我会沿着曲线计算多个点,假设每曲线25个点。有每一点,指向下一点。这些将像航路点一样 - 给予玩家在短时间内移动到下一个航路点的指令。因此,如果您想在5秒内沿整条曲线移动玩家,玩家需要每0.2秒从一个航点跳到另一个航点。

如果你想让机芯更少“抽搐”,你需要编写线性插值,这实际上可以进一步计算每个曲线路点之间较小的航点分度。

您可以为上述项目here

找到许多有用的方法

在下图中,蓝色斑点是航点。 Visual Description of points made above

替代(更简单)曲线方法

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