我正在做一个游戏,并且让玩家移动,但是当玩家在对角线处旋转(例如,向上然后向右)时,它并不像我想要的那样平滑。
这是一张显示问题的图片:
java - Java-回合球员-LMLPHP

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

我正在考虑也许会生成一个贝塞尔曲线以供玩家遵循,但是我不知道如何让玩家遵循它。

最佳答案

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

至于如何让玩家沿着曲线移动,我将计算曲线上的多个点,例如每条曲线25个点。有每个点,指向下一个点。这些将像航路点一样-指示玩家在短时间内移至下一个航路点。因此,如果您想在5秒内沿整个曲线移动播放器,则播放器将需要每0.2秒从一个航点“跳”到另一个航点。

如果您希望移动不那么“抖动”,则需要编写线性插值,这实际上将进一步计算每个曲线航路点之间航路点的更小划分。

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

在下图中,蓝色斑点是航点。
java - Java-回合球员-LMLPHP



替代(简单)曲线法

使用贝塞尔曲线的另一种方法是绘制一条非常简单的平滑曲线:首先从两个值开始-Xfactor = 0,Yfactor =10。在本例中,我假设曲线周围的移动速度为10个单位(例如,可能是像素)。对于每一帧,您都将Xfactor和Yfactor添加到播放器的当前位置。您还可以从Yfactor中减去常数(假设为0.5个单位),并将其添加到Xfactor中。您一直进行下去,直到Xfactor等于10,Yfactor等于0。这将导致播放器“移动” 90度。为了使播放器能够移动45度,您需要继续操作直到Xfactor等于5,因为这是10的一半。要保持播放器朝该方向移动,您需要继续将Xfactor和Yfactor添加到每帧/更新上的播放器位置。同样,要使播放器转弯,请随时间更改Xfactor和Yfactor。

关于java - Java-回合球员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34841646/

10-10 05:55