我目前有一个来自 A* 寻路函数结果的点 (x,y) 数组。设置此数组,以便第一个索引是最接近字符的点,下一个是需要在路径中经过的下一个点。
这些点在一个网格上(目前网格上每个点之间有 8 个像素,这是可以更改的。)
我目前的策略是将角色移动到第一个点,当他到达那个点时,然后移动到下一个点,就这么简单。
我通过创建一个从角色到该点的向量来移动到第一个点,并找出它有多远。然后我找到角度并朝那个方向移动。
// How the character is moved
double xMove = Math.cos(charAngle * (Math.PI / 180)) * 0.1 * delta;
double yMove = Math.sin(charAngle * (Math.PI / 180)) * 0.1 * delta;
x += xMove;
y += yMove;
absVx -= Math.abs(xMove);
absVy -= Math.abs(yMove);
absVX
并absVy
存储剩余的绝对距离,并在每次移动后递减。如果它们都低于或等于零,那么我们已经到达目的地,我们将它从数组中删除,并用下一个点重新计算所有内容。
我有两个问题。
有时角色会跳过一个点,然后他就永远旅行了。这很可能是由于游戏引擎添加到运动中的增量(光滑)并且角色移动得太远,不过我不确定这一点。
当我单击目标时,这很好用,但我需要的是能够按住鼠标按钮。目前,如果我按住鼠标,角色只会在第一点“静止”。
我有一个解决第二个问题的想法,但我不确定这是一个好主意。它是存储您想从最后一次鼠标单击开始的位置,但在您通过移动到的点之前不会实际计算它。
所以,我希望真正聪明有趣的人可以和我谈谈这个:D