Home
HahahaVal
Cancel

战斗集群

九宫格AOI

九宫格 把整个场景划分为多个格子,每个格子存储对应坐标范围的对象集合。 数据结构 场景网格使用二维数组(随机访问)存储对应xy坐标的对象链表(频繁插入删除),若地图的规格大小为300*300,一个格子的大小为30,则有10*10个格子。 使用map存储entityId和对象的数据,便于获取对应对象。 对象的视野半径最大为1个格子的大小,但也不能太小,因为需要预留...

十字链表AOI

十字链表 根据2d地图坐标系将其分成x轴和y轴两个双向链表,如果是3d地图,则需要多维护一条代表高度的双向链表。对象按照坐标值从小到大相应的排列在相应的坐标轴上面。 数据结构 对象的视野半径必须固定最大视野范围,例如坐标系+/-3,在对象进入,移动,离开时作为遍历xy链表的范围。判断是否在视野范围时,需要分别遍历x、y两轴,再求两轴的交集。 aoi对象只存储enti...

Jps寻路算法

Jps跳点搜索算法 Astar算法在搜索过程中需要把所有的邻居都检查一遍,并将其可走的节点加入到open_list中。 Jps算法搜索过程中只需要检查必要的邻居,将其满足条件的跳点加入到open_list中。 强迫邻居 节点 n 的8个邻居中有障碍,且 n  的父节点 p 经过n 到达 x 的距离代价比不经过 n 到达 x 的任意路径的距离代价小,则称 x 是 n 的强迫邻居。...

Astar寻路算法

曼哈顿距离 图形中只允许朝上下左右四个方向移动 计算公式:设格子的单位长度为D (|A.x-B.x|+|A.y-B.y|)*D 欧几里得距离 图形中允许朝任何方向移动 计算公式:根据勾股定理求斜边。设格子的单位长度为D dx=|A.x-B.x| dy=|A.y-B.y| Dsqrt(dxdx+dy*dy) 对角线距离 图形中允许朝八个方向移动 ...

游戏寻路方案

Grid 将游戏原始地图分割成网格,数据结构表现为二维数组,用0和1分别标识格子是否可走,没有地图的高度信息,因此比较适合2d地图,例如战棋类游戏 优点:容易动态修改地图的某个格子是否可走。算法可以多选,A*和JPS都支持 缺点:内存占用比较大,格子越小寻路的精确越高,同时占用的内存也会更大 2d地图寻路: 首先在地图中每0.5的间隔生成二维数据的高度图(不允许有多个高度...

ATB回合制战斗

战斗流程 玩家所在agent服务发起战斗请求,获取动态的战斗服务,由战斗池服务根据唯一key分配一个相对空闲的战斗服务返回 玩家所在agent服务注册到该战斗服务中,在战斗服务中创建playerObj,并与agent的玩家对象绑定,战斗的协议由agent服务转发到战斗服务处理 agent构造战斗所需要的数据传递到战斗服,由战斗服根据类型创建战斗对象和实体对象 战斗结束后,通...