我正在制作游戏,我让玩家移动,但是当玩家转向对角线(例如,向上,然后向右)时,它并不像我想要的那样平滑。 这是一张显示问题的图片:
玩家线表示玩家的路径。 我怎样才能达到这个效果?
我在考虑为玩家制作一条贝塞尔曲线,但我不知道如何让玩家跟随它。
答案 0 :(得分:2)
您在使用贝塞尔曲线时的假设是正确的。我建议(如果你还没有)编写一个Update方法,你可以用它来逐帧控制玩家的移动。换一种说法;一种在单独的线程中运行的方法,用于触发要沿曲线移动的玩家的位置更新。它将充当队列,仅在给定的时间量过去时执行移动等。
至于如何让玩家沿着曲线移动,我会沿着曲线计算多个点,假设每曲线25个点。有每一点,指向下一点。这些将像航路点一样 - 给予玩家在短时间内移动到下一个航路点的指令。因此,如果您想在5秒内沿整条曲线移动玩家,玩家需要每0.2秒从一个航点跳到另一个航点。
如果你想让机芯更少“抽搐”,你需要编写线性插值,这实际上可以进一步计算每个曲线路点之间较小的航点分度。
您可以为上述项目here
找到许多有用的方法使用贝塞尔曲线的另一种方法是做一个非常简单的平滑曲线:在向右转的情况下;从两个值开始 - Xfactor = 0,Yfactor = 10.对于这个例子,我假设曲线周围的移动速度是10个单位(例如,它可能是像素)。对于每个帧,您将Xfactor和Yfactor添加到玩家当前位置。您还可以从Yfactor中减去一个常量(比如说0.5个单位)并将其添加到Xfactor中。你继续前行直到Xfactor等于10并且Yfactor等于0.这应该让玩家“移动”90度。为了让玩家移动45度,你会继续前进,直到Xfactor等于5,因为这将是10的一半。为了让玩家朝那个方向移动,你需要继续添加Xfactor和Yfactor来每个帧/更新的玩家位置。 同样,为了让玩家转弯,你会随着时间的推移改变Xfactor和Yfactor。