Project1

标题: 寻路脚本出错,如何修改 [打印本页]

作者: huajinyu123    时间: 2017-8-31 21:31
标题: 寻路脚本出错,如何修改
本帖最后由 huajinyu123 于 2017-8-31 21:56 编辑

我在网上下了个寻路脚本
然而执行寻路的事件老是卡在单面不可通行地图块那里,(打开附件,运行,看一下就明白了)
我检查了半天也没查出问题
求解

第二个附件fp.rar才是展示问题之所在

Project3.rar

188.99 KB, 下载次数: 65

fp.rar

189.79 KB, 下载次数: 71


作者: guoxiaomi    时间: 2017-9-2 11:42
本帖最后由 guoxiaomi 于 2017-9-2 11:48 编辑

我下载了 fp.rar 文件,把脚本 - 附加里的 astarmove 方法稍微修改了一下,问题解决了:

RUBY 代码复制
  1. def astarmove(to = 0,from = "self")
  2.     from = @id if from=="self"   
  3.     from = from==0 ? $game_player : $game_map.events[from]
  4.     to = to==0 ? $game_player : $game_map.events[to]
  5.     #p from.id,to.id if from.is_a?(Game_Event)
  6.     unless from.moving?
  7.       if (from.x-to.x).abs<=1 and (from.y-to.y).abs<=1
  8.  
  9.       else
  10.         if !@dr
  11.           @astr = AStar.new($game_map)
  12.           @astr.set_origin(from.x,from.y)
  13.           @astr.set_target(to.x,to.y)        
  14.           @dr = @astr.do_search[0..5]
  15.         else
  16.           move_dr(@dr.shift)
  17.           @dr = nil if @dr.empty?
  18.         end
  19.       end
  20.     end
  21.   end


优化的原则是:
1. 并不在每次行走都执行寻路,而是等前一次的寻路完全走完
2. 只取 astar 算法找到的前 5 步,这样即使目标改变也能尽快调整

原来的写法是每走一步都会执行寻路,其实没有必要……
问题出在哪?我并不知道……




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