1

我目前正在编写一个基本的平台游戏,其想法是学习 2D 游戏开发的基本模式。其中之一是惊人的 A Star Pathfinding。在阅读和研究了几篇文章之后(其中两篇最好:http ://www.policyalmanac.org/games/aStarTutorial.htm和 http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html# S7 )、教程和源代码,我使用曼哈顿方法做了一个简单的 A Star Pathfinding,非常适合我的个人学习过程。

下一步也是合乎逻辑的步骤是在平台场景中执行相同的操作,NPC 必须跳过或爬梯子才能到达目标。我发现这些截屏视频http://www.youtube.com/watch?v=W2xoJfT6sekhttps://www.youtube.com/watch?v=Bc7tu-KwfoU完美地展示了我想做的事情。

目前我还没有找到任何资源来解释实现它的方法。有人可以给我一个可以合作的起点吗?

提前致谢

4

2 回答 2

3

据我所知,跳跃/梯子的唯一区别是它们会影响可能的运动。因此,您的算法所要做的就是考虑角色可以和不能移动到的位置,以及移动到那里的成本(如果您正在实施)。

于 2012-09-01T09:00:06.887 回答
0

我没有任何适合示例的干净 A* 代码,但让我在实现 A* 时给你一些指示。

首先,我经常发现在教程中被忽略的最基本技巧是使用优先级队列

每当您生成可能的移动状态时,将它们放入优先级队列中,优先级是该移动状态的启发式值。这将 A* 与 DFS(使用堆栈和回溯)或简单的贪心寻路(相对于当前状态简单地进入最佳状态)区分开来。

接下来,请注意这些指示!我不知道你会用什么语言来实现它,但即使你用某种抽象指针的语言(不像 C)来实现它,你也必须理解deep copy与 plain shallow copy的概念。我记得我第一次做 A*(在 Python 中)时并没有注意这一点。我的状态被反复覆盖导致不可预测的行为。原来我没有做深拷贝!

也就是说,根据您所考虑的任务的复杂程度,所有这些深层副本可能会使您的记忆变得混乱。虽然良好的内存管理会有所帮助,但对于需要实际性能的大问题实例,我倾向于只使用迭代加深 A*,以便在每次迭代之后,我可以整理我的内存。

于 2012-09-01T09:18:46.513 回答