Project1

标题: VX用寻路算法. [打印本页]

作者: 美兽    时间: 2008-2-26 20:08
标题: VX用寻路算法.
在如下脚本基础上更改,版权归原作者所有.

http://rpg.blue/web/htm/news457.htm

四方向修改:
def fp_passable?(x, y, d)  #开始判定通行
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    return true if $game_player.passable?(nex_x, new_y)
    return false
end  #结束判定通行


八方向修改:
def fp_passable?(x, y, d)  #开始判定通行
    sx = d % 3 ; sy = (d - 1) / 3
    new_x = x + ((sx == 0) ? 1 : (sx == 1) ? -1 : 0)
    new_y = y + ((sy == 0) ? 1 : (sy == 2) ? -1 : 0)
    return true if $game_player.passable?(nex_x, new_y)
    return false
end  #结束判定通行




作者: 精灵使者    时间: 2008-2-26 20:31
转移到vx技术区……嗯嗯
作者: 柳之一    时间: 2008-2-26 21:39
这个寻路算法计算起来有些慢,只有主人公的时候还好
即时战略的游戏需要计算每个单位的时候,计算缓慢。
我这有另一种算法,在xp下面运转的很不错,就是移植到vx上有bug怎么也改不了。{/dk}
作者: 美兽    时间: 2008-2-27 04:58
以下引用柳之一于2008-2-26 13:39:51的发言:

这个寻路算法计算起来有些慢,只有主人公的时候还好
即时战略的游戏需要计算每个单位的时候,计算缓慢。
我这有另一种算法,在xp下面运转的很不错,就是移植到vx上有bug怎么也改不了。


那个是比较标准的A*,对于即时来说,一般不可能是每个单位都寻路的,而是根据执行范围进行区域划分,对统一区域的单位,之后一个是寻路,其他为跟随,另外根本各自游戏的地形等其他特征,还是有其他取巧的方式,例如对角线寻路等。

XP与VX在程序运行上似乎不存在逻辑冲突— —
作者: 雷欧纳德    时间: 2008-2-27 16:28
要加快求值方法的话,可以用二叉堆存入开启列表

另外还有就是减少循环,加快搜索速度,设置默认不可通行区域什么的
还有个办法是分层实现高速寻路,先宏观搜索大致路径,靠近目标时再微观搜索精确路径,这个办法可以处理点较多的情况(500*500这样的地图)

不过rm效率上的问题,肯定结果还是比较慢的。。。。。。
实习上,我觉得rm不适合用A*,应该用些低级的但是更加高效的寻路
作者: 御灵    时间: 2008-8-8 02:53
http://rpg.blue/web/htm/news1138.htm
vip+1




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1