A星寻路算法如何按角色面积大小进行寻路的实现方案,代码TypeScript版

虽然很巧妙但用最大的呢个拐弯时碰到墙了,游戏里会穿模的image

算法得改下,就在a的基础上修改下
a
为:判断下一个格子是否是墙
改为:判断如果球在下一个格子的位置是否会和墙重叠即可

6666 插眼

因为角色是严格以格子为单位判断占据面积的,不是按照物体的像素面积。所以有点点穿模其实没关系。如果要严格不穿模,可以把角色的占据格子面积大于像素面积即可,在我写的代码里,占据格子面积和自身像素面积是完全独立互不干扰的。把格子面积设置得必像素面积大会造成角色可能离障碍还有点距离,但是无法走过去,魔兽争霸里的角色也是这样的设定,允许角色的占地面积稍微大于自身体积,虽然会和障碍物有点距离,但是不会影响游戏的可玩性。

比如下图占地面积比像素面积稍微大一点就能解决穿模的问题

战略mark/
支持.

战略mark

像是路径最后优化的锅,好像是优化出可以斜着走造成的问题
这样看在球走到这个点的位置明显不对啊
image

这是使用了8方向寻路,优化斜方向路线时并不能保证边缘是否有溢出障碍的,但是能保证每个覆盖的路点的中心点在可走路点范围内,这种边缘误差不会影响游戏的进行。如果选择4方向寻路,只能横竖行走就不会有这种问题。看开发者选择

如果要完全解决这种有边缘重叠也是可以做得到的,行走使用RVO导航
这个链接里的梦幻西游案例代码里有RVO算法,你运行一下测试就知道了

a*本来就不会有这个问题…就是上下左右走…
斜着来属实是奇怪
梦幻西游人家是六边形或者菱形格子可以保证斜着走没这个问题

A星寻路优化的原理是这样的,只要两点一线没覆盖任何障碍就代表能通的,有时路线会很贴近障碍边缘。这时玩家从线路通过就有可能自身某些边缘和障碍重叠,不管传统的RPG,RTS,MOBA这些游戏的寻路都是这样的,允许路线贴障碍边缘,而且角色像素的大小不一定就等于格子的大小,可以允许小于格子。玩家视觉上看得也是看像素大小,所以格子有点边缘重叠是不用太纠结的

很多情况下A星寻路是不希望只能上下左右行走的,如果梦幻西游角色只能上下左右行走那就变得很怪异了。允许斜着走才是最短的路径。

这个是地图的问题和啥路径优化不一样,你说为啥有呢么多形状的格子
就是为了解决斜着走的问题啊
算了我太纠结了
就是现在格子稀疏还好,当你改的密集了就会出现有接近一半穿模的情况,可能是我想的太多
image
image

不同形状的格子是应用不同的游戏的,不是为了解决斜着走

我做过一个伪3d视角的2D游戏看起来场景是3D的人也正常按呢个角度走使用菱形的呢种地图就很自然…
像这种地图人物只能移动到固定的点你要说魔兽也这样呢你试着把格子改密点试试,过个弯一半穿模,

菱形格子的是用来做2.5d游戏,这样能保证玩家的行走比较自然

呢个是可以解决的
只要你遍历所有障碍物节点按你当前玩家的占用范围扩增下障碍物范围,然后用生成得到这个障碍物范围来进行路径优化就没穿模问题了,而且只要目标大小不变这个范围地图还能重复使用
相当于我们把玩家的体积加到障碍物上进行计算,这样即使擦边实际上也能完美绕过,路径优化直接完美不穿模哈哈哈,也不用改算法,我真是机智
我说的是前面不变,就是对路径点进行优化的时候使用这个方法
属实是我有点强迫症,如果得罪了请别在意
我有想法了写一个试试哈哈,而且不用变所有的用到哪变那完美

我就看看哪些大佬买了,现在研发真有钱

强 mark

cocos生态就这样,unity各种插件收费的免费的,要不是支持cocos就转unity,哎算了,还是看unity教程硬搬到cocos

1赞