我目前正在编写一个基本的平台游戏,其目的是学习2D游戏开发的基本模式。其中之一就是惊人的A Star寻路。在阅读并研究了一些文章(其中两篇是最好的: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=W2xoJfT6sek和https://www.youtube.com/watch?v=Bc7tu-KwfoU完全显示了我想要做的事情。
我目前还没有找到解释实现它的方法的任何资源。有人可以给我一个我可以使用的起点吗?
提前致谢
答案 0 :(得分:3)
据我所知,跳/梯子的唯一区别是它们会影响可能的运动。因此,您的算法所要做的就是考虑角色可以和不能移动的位置,以及移动到那里的成本(如果您正在实施)。
答案 1 :(得分:0)
我没有任何干净的A *代码适合一个例子,但是在实现A *时让我给你一些指示。
首先,我经常在教程中忽略的最重要的提示是使用优先级队列。
每当您生成可能的移动状态时,将它们放入优先级队列,优先级为该移动状态的启发式值。这将A *与DFS(使用堆栈和回溯)或简单的贪婪路径查找区分开来(相对于当前状态,它简单地进入最佳状态)。
接下来,请注意那些指针!我不知道你会用什么语言实现这个,但即使你用一些抽象指针的语言(不像C),你必须理解深层复制与普通的概念>浅拷贝。我记得我第一次做A *(在Python中)并没有注意到这一点。我的州被反复覆盖,导致不可预测的行为。结果我没有制作深刻的副本!
也就是说,根据您所考虑的任务的复杂程度,所有这些深层拷贝可能会使您的记忆混乱。虽然良好的内存管理会有所帮助,但对于需要实际性能的大问题实例,我倾向于使用迭代加深A *,以便在每次迭代后,我都能整理我的内存。