查看: 2008|回复: 1

[已经过期] 寻路脚本出错,如何修改

[复制链接]
梦石
0
星屑
3293
在线时间
1463 小时
注册时间
2014-8-9
回帖
308
发表于 2017-8-31 21:31:39 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 huajinyu123 于 2017-8-31 21:56 编辑

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

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

Project3.rar

188.99 KB, 下载次数: 68

fp.rar

189.79 KB, 下载次数: 72

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2017-9-2 11:42:49 | 显示全部楼层
本帖最后由 guoxiaomi 于 2017-9-2 11:48 编辑

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

[pre lang="ruby"]def astarmove(to = 0,from = "self")
    from = @id if from=="self"   
    from = from==0 ? $game_player : $game_map.events[from]
    to = to==0 ? $game_player : $game_map.events[to]
    #p from.id,to.id if from.is_a?(Game_Event)
    unless from.moving?
      if (from.x-to.x).abs<=1 and (from.y-to.y).abs<=1
        
      else
        if !@dr
          @astr = AStar.new($game_map)
          @astr.set_origin(from.x,from.y)
          @astr.set_target(to.x,to.y)        
          @dr = @astr.do_search[0..5]
        else
          move_dr(@dr.shift)
          @dr = nil if @dr.empty?
        end
      end
    end
  end[/pre]

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

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

评分

参与人数 1星屑 +200 收起 理由
RyanBern + 200 可惜楼主没影了

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部