在功能较弱的设备上进行移动游戏(例如rts)的任何寻路技巧和策略?

时间:2014-08-30 15:57:49

标签: optimization artificial-intelligence game-engine

我正在开发一款2D游戏,rts游戏,有点像COC(Clash of Clans)。很酷的手机游戏,呵呵。但是我遇到路径寻找的一些问题,像往常一样,我做路径寻找算法一旦每个代理被手指触摸放在屏幕的某个地方,但在某些情况下,这会导致性能损失,你的手机会非常当你的代理人突然和同时增加时会很热。

实际上,无论我使用什么路径查找,例如a *,dijkstra,或者特殊的东西(可能是最佳的),这在整个游戏循环中始终是时间消耗的过程,尤其是在功能较弱的移动cpu上的大型代理。据我所知,像这样的游戏,最短的路径不是焦点(人们会关心路径代理人故意走过吗?)而不是高效自然的路径寻找。所以我的想法提出了一些解决方案,也许是不切实际的。

解决方案1:使用一些更便宜的路径寻找算法,可能是图形相关或某些因素,因为最短路径无关紧要。

解决方案2:对ai模块进行一些限制,以处理代理进行路径查找,例如,间隔路径查找算法调用的上限,即只有一个或两个代理程序得到规划,让其余的他们在几个游戏框架之后计划。如你所知,它的缺点是显而易见的。

以上是我的想法。希望你的游戏开发纪律严明的家伙给我一个绝妙的主意,技巧,我会appricate。非常感谢你。

编辑: 这是我的相关伪代码,程序cresspond到我的游戏逻辑。 //inside logic thread procedure putonagent if (need to put agent on world space) //do standard a* path-finding for an agent path_list=do_aStar_path_finding(attacktargetpos,startpos); and then enqueue path_list; ...... end path_list的队列最终被可视代理用于前进。任何提示?

1 个答案:

答案 0 :(得分:1)

查找"分层寻路"假设您开车到远方的城市,在上车之前,您没有计划整条路径!

寻路通常是分步进行的,就像它不是一个函数调用一样,在N次迭代之后它会返回(并指示它没有完成)所以它可以在下一次运行时运行时间。基本上,而不是本地人的函数认为operator()和状态变量作为类的成员。

为了使它快速你可以使用A *寻路制作启发式垃圾,假设我使用了10 *距离像蝇苍蝇的启发式,它可能找不到最短的路径但它会有一个强大的倾向于朝向目标而不是"散开"并在封闭区域进一步探索。

相关问题