gpt4 book ai didi

java - 如何在点数组之间可靠地移动角色?

转载 作者:行者123 更新时间:2023-12-02 08:14:34 27 4
gpt4 key购买 nike

我目前有一个来自 A* 寻路函数结果的点数组 (x,y)。该数组的设置使得第一个索引是最接近字符的点,下一个索引是路径中需要行进的下一个点。

这些点位于网格上(当前网格上每个点之间有 8 个像素,这是可以更改的。)

我当前的策略是将角色移动到第一个点,当他到达该点时,然后移动到下一个点,就这么简单。

我通过创建从角色到该点的 vector 来移动到第一个点,并找出它有多远。然后我找到角度并朝那个方向移动。

// 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);

absVXabsVy 存储剩余的绝对距离,并且每次移动后都会递减。如果它们都小于或等于零,那么我们已经到达目的地,我们将其从数组中删除,并使用下一个点再次重新计算所有内容。

我有两个问题。

  1. 有时角色会跳过一个点,然后他就永远旅行。这很可能是由于游戏引擎增加了运动(光滑)的增量,并且角色移动得太远,但我对此不确定。

  2. 当我单击目的地时,效果很好,但我需要的是能够按住鼠标按钮。目前,如果我按住鼠标,角色只会在第一个点上“静止”。

我有一个解决第二个问题的想法,但我不确定这是个好主意。它用于存储从最后一次鼠标单击开始您想要前往的位置,但直到您经过要移动到的点之前才实际计算它。

所以,我希望真正聪明又有趣的人可以与我就此进行一些对话:D

最佳答案

关于1,最可能的原因是舍入问题;添加这些 xMove/yMove 会引入一个小错误,并且 x 和 y 永远不会真正获得目的地的值,因此算法会继续运行。

解决方法:

1 定义“到达目的地”,以便允许一定程度的错误

2 找出角色到达目的地需要多少“刻度”,当它“到达”时,强制角色位置到达目的地(这可以纠正累积的错误)。

另外,我会回到图形理论。 IIRC,您在点之间移动的路径应该等于 Bresenham 的画线算法。在后面的阶段,您的角色可以沿着他的路径遵循 B 样条曲线。

关于java - 如何在点数组之间可靠地移动角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6700646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com