游戏中的跨场景寻路

来源:互联网 发布:淘宝如何设置货到付款 编辑:程序博客网 时间:2024/06/07 09:23

  年前写过一个跨场景寻路的程序。我们的游戏用鼠标点那种,不是像WOW那种前后左右。在同一场景中使用A*寻路,策划现在的需求是这样呢的,在任务中NPC,杀怪等需要自动寻路能走到其他场景中的NPC或者怪物或者是其他任何东西。

         首先看看,我们现在能做的:

         A.同一场景能自动走到 xy

         B.当场景发生切换的时候我们可以收到切换消息。

         C. 每张地图文件中有传送(Trigger)点的ID, 和传送点的位置

         D.场景配置文件中有A场景 Trigger k,传送的目标场景标号和传送到的xy位置。

         我的想法是这样的,因为可以在本场景之内到达任意点(应该每一个用鼠标点的有自动寻路功能更的游戏都可以),所以,我们要寻的“路”其实只是场景A如何到场景B的场景节点路径。如果现在我们的位置在场景1(x=10,y= 20),目标点场景3(x=80,20),并且知道1场景的( 20,80)点会传送到场景2(30,40), 而场景2(80,50)可以传送到3(10,30)。那么我们得到的路径是这样的 (reginon, x, y): { (1, 10, 20) - (1,20,80)} -> {(2,30,40)-(2,80,50)} -> {(3,10,30) – (3,80,20)}{}代表在本场景用A*自动寻路,把上边的路子存在一个链表里边,每次切换场景时pop链表头,我们就落在了新头的第一个(x,y),寻路目标变成本场景的第二个点(xy)也就是传送节点或者也可能是终点。

         那么这些场景中连接传送点从哪里来呢?基于上边的CD已知条件做一个场景传送点的配置文件及可以了,用程序自动生成,如果你足够有耐心手写也可以。我的生成的配置的格式是这样的:

         {当前场景,x,y}{传送场景,落点x,y}

         { { 1, 124, 14}, { 100, 25, 84 } },

         好了,有了这个配置我们找场景路径就没有问题了。我使用的是最短路径优先的 ,我用的方法是广度优先的搜索方法,具体方法参加:算法导论p324页。废话不说了上代码(lua):

 

--生成从节点a到节点b路径

 

 

 

         这样我们就找到了从场景A到场景B的场景路径如 1 , 2, 3,再和配置中相应的x,y组装起来就得到了( r1,x1,y1)(r2,x2,y2)(r3,x3,y3)或者其他恰当形式的列表。

--从节点路径生成 场景,x,y 路径

 

        

  我从lua中得到这个路径,在C中场景切换时就换一次本场景的寻路。半年以来工作联合,哈哈。对了还有一个python写的从map和场景配置中生成场景连接点的工具。具体的东西请看代码。C中如果使用的部分没有代码。如有写得不清不楚的地方请予批评指正!

 

完整代码 http://download.csdn.net/source/2386715