一个简单的寻路算法
周末跟同事聊天,问了一下最近公司新项目的一些需求。发现现在无论是玩家还是策划,纷纷要求引擎可以实现自动寻路。虽然我对此不以为然,但其实这也不是什么难题,打算随便做一个好了。
我们现在的 engine 是用矢量线段描述场景中的障碍的。这些线段无所谓人工标记还是从场景模型中自动生成出来,又或者是用传统的打格子的方法变换出来。在这些障碍线构成的矢量场景中寻路其实不是什么难事。
我们只需要在场景中标记出若干 waypoint ,这些 waypoint 一般在大片无障碍区域的中央,以及分叉路口。游戏中故意设计迷宫为难玩家绕来绕去又没有什么玩点内容在里面是没有什么意义的。(除非是“不可思议的迷宫”这种以迷宫为重要玩法的游戏)所以,大多数游戏场景,路径的拓扑关系复杂度非常有限。 waypoint 靠人工设置就足够了。
btw, 自动生成 waypoint 也不是难事,反正这个东西不会是性能要点,机器生成 waypoint 不会比人工设置的糟糕太多。算法就不展开谈了。waypoint 的设置要点是:场景中所有可达区域都能看到至少一个 waypoint ,这个要求可以用程序检测。
我们把所有 waypoint 间可以直线连接的线路连起来,得到一张图。可以预存下这张图,以后的工作则非常简单。
每次需要得到场景中任意两点间的路径,就从起始点和目标点各取一个临近可见的 waypoint 。之后求这两个 waypoint 间在图上的最短路径。Dijkstra 算法即可。
得到路径后,角色在场景中行走时,间隙的判断是否可以直接看到路径上的下一个 waypoint ,只要可以看到,就沿直线方向朝路径上最远可见的 waypoint 移动。最终可以得到一条较为自然的运动轨迹。
嗯,没啥高深的算法,随便写写就能实现了吧。
最近在公司附近的一个小区会所办了张健身年卡。几年没动了,体力和力量都下降了不少。关键是平时精神不太好,感觉没前几年有活力。是应该每天流点汗,吃好睡好,这样脑子更好使。
已经坚持去了三次了,重量大了会有点头晕,得控制一下。刚开始恢复,浑身肌肉酸痛。昨天做了几组深蹲,今天走路都有点痛。不过这几天居然有了不小的食欲。白切牛肉可以吃一大盘,冰箱里的鸡蛋一扫而光。是个好兆头。
Comments
Posted by: 886 | (17) August 19, 2020 07:19 PM
Posted by: daliniu | (16) October 17, 2016 05:42 PM
Posted by: Tone | (15) March 24, 2010 01:02 AM
Posted by: MicroOnion | (14) August 7, 2008 11:21 AM
Posted by: Jean | (13) July 27, 2008 04:25 PM
Posted by: Siney | (12) July 25, 2008 04:00 PM
Posted by: lbaby | (11) July 23, 2008 09:33 AM
Posted by: Leon | (10) July 22, 2008 10:04 PM
Posted by: hillin | (9) July 22, 2008 12:42 AM
Posted by: tigerdx8 | (8) July 21, 2008 01:48 PM
Posted by: nothanks | (7) July 21, 2008 12:02 PM
Posted by: Leon | (6) July 21, 2008 11:46 AM
Posted by: roy_hu | (5) July 21, 2008 09:49 AM
Posted by: skillzero | (4) July 21, 2008 09:37 AM
Posted by: Anonymous | (3) July 20, 2008 08:59 PM
Posted by: Anonymous | (2) July 20, 2008 08:51 PM
Posted by: gameroger | (1) July 20, 2008 08:20 PM