Project1

标题: 请问可以设定事件移动到指定的坐标吗? [打印本页]

作者: 吉吉阿茶    时间: 2020-5-14 00:14
标题: 请问可以设定事件移动到指定的坐标吗?
RT,当某个事件需要在几个不同的位置之间由玩家选择移动时,虽然也可以固定好移动的路线,但是地图上可以移动的位置变多后需要设置的路径就会相当多,非常繁杂的感觉
因此,就想知道移动的时候,可否以指定的坐标为终点,自动寻路移动过去之类的,如果能直线移动最好,或者左上右上这样斜方向移动也不错
————————
或者来让玩家接近事件、以及事件接近事件之类的方式?

如果可以当然还是希望直线移动而不是沿着格子走的,要是是显示图片,移动一下倒也就好了……可惜还是事件,不过感觉这样应该就需要脚本了
作者: KB.Driver    时间: 2020-5-14 00:55
本帖最后由 KB.Driver 于 2020-5-14 00:58 编辑

以前写的一个东西,也许能满足需要,不过应该不是最优化的代码。

移动路线中写脚本chase("xxx")
则会去追最近的注释写有xxx的事件

可以在你想让事件跑去的点上弄个透明事件,注释里加个关键词,
然后让人物执行移动路线chase("xxx")

注意每次chase只会走一步,因此需要循环。
如果走到了位置,你可以用分歧判断结束chase的循环。




RUBY 代码复制
  1. #==================================================================
  2. #  追逐事件 by Calendar99
  3. #
  4. #    追逐者设置移动路线--脚本--chase("string"),循环执行。
  5. #    之后追逐者会追逐地图上最近的注释有string的事件。
  6. #    可以在脚本中加入分歧判断,让事件在不追逐的时候执行其他行动。
  7. #
  8. #==================================================================
  9. class Game_Character
  10.  
  11.   def chase(string)
  12.     return false unless (event = get_chasing_event(string))
  13.     move_toward_character(event)
  14.     true
  15.   end
  16.  
  17.   def distance_to(character)
  18.     distance_x = (self.x - character.x).abs
  19.     distance_y = (self.y - character.y).abs
  20.     return distance_x + distance_y
  21.   end
  22.  
  23.   def get_chasing_events(string)
  24.     $game_map.events.select{|id, event| event.match(string) }
  25.   end
  26.  
  27.   def get_chasing_event(string)
  28.     return unless (event_hash = get_chasing_events(string))
  29.     event_array = []
  30.     event_hash.each_value{|event| event_array << event}
  31.     event_array.sort{|a, b| self.distance_to(a) <=> self.distance_to(b) }.first
  32.   end
  33.  
  34. end
  35.  
  36. class Game_Event
  37.  
  38.   def match(string)
  39.     @list.each do |command|
  40.       next unless command.code == 108 #注释
  41.       return true if command.parameters[0].index(string)
  42.     end
  43.     false
  44.   end
  45.  
  46. end





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