游戏中的跨场景寻路
来源:互联网 发布:淘宝如何设置货到付款 编辑:程序博客网 时间:2024/06/07 09:23
年前写过一个跨场景寻路的程序。我们的游戏用鼠标点那种,不是像WOW那种前后左右。在同一场景中使用A*寻路,策划现在的需求是这样呢的,在任务中NPC,杀怪等需要自动寻路能走到其他场景中的NPC或者怪物或者是其他任何东西。
首先看看,我们现在能做的:
A.同一场景能自动走到 x,y
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)也就是传送节点或者也可能是终点。
那么这些场景中连接传送点从哪里来呢?基于上边的C、D已知条件做一个场景传送点的配置文件及可以了,用程序自动生成,如果你足够有耐心手写也可以。我的生成的配置的格式是这样的:
{当前场景,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
- 游戏中的跨场景寻路
- Unity制作游戏中的场景
- [图形学] 游戏中的场景管理
- 【游戏跨场景寻路】基于as3语言的游戏地图跨场景寻路功能的实现
- 游戏开发1:游戏中的场景
- Cocos2d-x游戏中的场景滚动
- Cocos2d-x游戏中的场景滚动
- Unity插件 暂停场景中的游戏对象
- 游戏服务器之跨场景
- SDL游戏之路(十二)--游戏场景
- 游戏场景
- cocos2d-x 3.2|创建游戏中的场景:背景
- Unity之实时渲染场景中的游戏对象
- 笨方法习题43中的游戏场景切换方法记录
- 游戏场景管理设计
- 游戏场景管理设计
- 游戏场景管理设计
- 游戏场景管理
- 写给新入IT的新人们(转 感觉自己有很多的毛病)
- 采用选择排序法对链表进行排序,注意交换操作中不是对链表里某一节点里的某一元素进行交换,而是对两节点指针的交换
- JS字符串全替换方法
- (转)vc串口编程与曲线绘制
- 判断两个链表是否相交
- 游戏中的跨场景寻路
- C++对象模型
- 乌合之众(大众心理研究)之一:民主直通独裁的心理机制
- 浅谈人性 - 讲讲人性丑恶的一面
- 走火入魔权限管理系统、对多系统的集中权限管理配置实现参考
- 创建Oracle数据库索引的三个标准
- 几个典型的内存拷贝及字符串函数实现
- 使用C语言扩展Python(五)
- 使用C语言扩展Python(四)