我尽量简短点:
我的A星路径经过2步平滑
1:去重:如果同一直线或斜线,有3个或以上的点,只保留头和尾,去除中间所有点
2:直线障碍判断:3种情况(白色圆是障碍),如果有随意1个是障碍,那么2点不能直接相连
(1):同X或同Y轴,
(2)同斜线,但是是相邻点的斜线
(3)都不是上面的情况,采用通用y=kx+b方案
先判断X红线(red) 与 直线 的菱形交点,如果交点不在4格中点,判断左右,如果在,判断4格
Y轴红线同理,我这里不同形状代表不同时期要判断的障碍点,菱形代表交点,用于要判断的障碍点的位置
下面经过测试:A星寻路,白色圆圈是真实障碍,红色圆圈是虚拟的在障碍判断时候的障碍点
S到E的初始路径为 S a 若干 mid c close

第一步去重:去掉若干和c点,现在的路径是S a mid close E
第二步拿上一步的5个点使用二分递归进行障碍判断,参数为2个点:
第1次是首尾点,也就是S和E点进行判断,显然不行,分裂递归,找到S和E的中间点也就是mid,
第2次现在要判断2个递归,参数为S和mid , mid和E
S和mid中间没障碍,S和mid直接添加进最终路径,结束这部分的递归
mid和E还是有障碍(绿线碰到了右上角的白色圆圈),继续分裂,中间点是close,现在要判断2个递归,参数为mid和close , close和E
在障碍判断之前,如果2点是相邻点,那么直接添加进最终路径列表,不需要判断障碍
所以mid和close,close和E直接添加进最终路径列表,所有递归结束
现在最终路径列表是:S mid mid close close E 对应左下角这里0 2 2 3 3 4
我的疑问就是,当角色走到已经被去重的C点,这时候C点到E点才是最短路径,但是C点已经没了,就算把C点加回来,在第二步递归的时候,C点也不一定会被当做递归障碍参数点进行判断,所以想问问大佬这个是哪里出现问题,能够怎么优化好点。条件是必须按照二维格子走