赞 | 13 |
VIP | 27 |
好人卡 | 24 |
积分 | 6 |
经验 | 58769 |
最后登录 | 2017-11-28 |
在线时间 | 795 小时 |
Lv2.观梦者 无节操
- 梦石
- 0
- 星屑
- 607
- 在线时间
- 795 小时
- 注册时间
- 2009-2-6
- 帖子
- 3939
|
18L提供的脚本的完整版
来源为ZTBS,其真实作者不详0 0(也许是ZTBS的作者?)
自汉化- #==============================================================================
- # 「移动方法」 ver1.20
- # by 水夜
- # 汉化 by moy
- # http://zenith.ifdef.jp/
- #------------------------------------------------------------------------------
- # 提供了不少方便调用的移动方法
- #==============================================================================
- # 给出目录方便查找和使用:
- # 中文名 行数 方法名
- # "走向某事件" 26 go_to_event(id)
- # "远离某事件" 61 move_away_from_event(id)
- # "移向指定坐标" 96 go_to_position(x, y)
- # "从指定坐标返回" 129 move_away_from_position(x, y)
- # "面向某事件" 162 turn_toward_event(id)
- # "背向某事件" 183 turn_away_from_event(id)
- # "面向某一坐标" 204 turn_toward_position(x, y)
- # "背向某一坐标" 223 turn_away_from_position(x, y)
- # "随机范围移动" 242 move_random_area(x, y, distance)
- #==============================================================================
- class Game_Character
- #--------------------------------------------------------------------------
- # ●定义"走向某事件"的方法
- #--------------------------------------------------------------------------
- def move_toward_event(id)
- # 计算与需要走向的某事件的位移
- sx = @x - $game_map.events[id].x
- sy = @y - $game_map.events[id].y
- # 如果位移为0(也就是说是本事件)则返回
- if sx == 0 and sy == 0
- return
- end
- # 设置XY的绝对值变量
- abs_sx = sx.abs
- abs_sy = sy.abs
- # XY的绝对值相等时
- if abs_sx == abs_sy
- # X或Y自加1
- rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
- end
- # X比Y的绝对值大时
- if abs_sx > abs_s
- # 在X方向位移结束后执行Y方向
- sx > 0 ? move_left : move_right
- if not moving? and sy != 0
- sy > 0 ? move_up : move_down
- end
- # X比Y的绝对值小时
- else
- # 在Y方向位移结束后执行X方向
- sy > 0 ? move_up : move_down
- if not moving? and sx != 0
- sx > 0 ? move_left : move_right
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 定义"远离某事件"的方法
- #--------------------------------------------------------------------------
- def move_away_from_event(id)
- # 计算与需要远离的某事件的位移
- sx = @x - $game_map.events[id].x
- sy = @y - $game_map.events[id].y
- # 如果位移为0(也就是说是本事件)则返回
- if sx == 0 and sy == 0
- return
- end
- # 设置XY的绝对值变量
- abs_sx = sx.abs
- abs_sy = sy.abs
- # XY的绝对值相等时
- if abs_sx == abs_sy
- # X或Y自加1
- rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
- end
- # X比Y的绝对值大时
- if abs_sx > abs_sy
- # 在X方向位移结束后执行Y方向
- sx > 0 ? move_right : move_left
- if not moving? and sy != 0
- sy > 0 ? move_down : move_up
- end
- # X比Y的绝对值小时
- else
- # 在Y方向位移结束后执行X方向
- sy > 0 ? move_down : move_up
- if not moving? and sx != 0
- sx > 0 ? move_right : move_left
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 定义"移向指定坐标"的方法.
- #--------------------------------------------------------------------------
- def move_toward_position(x, y)
- # 计算与目标坐标间的位移
- sx = @x - x
- sy = @y - y
- # 如果是当前所在坐标则返回
- if sx == 0 and sy == 0
- return
- end
- # 设置XY的绝对值变量
- abs_sx = sx.abs
- abs_sy = sy.abs
- # XY的绝对值相等时
- if abs_sx == abs_sy
- # X或Y自加1
- rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
- end
- # X比Y的绝对值大时
- if abs_sx > abs_sy
- sx > 0 ? move_left : move_right
- if not moving? and sy != 0
- sy > 0 ? move_up : move_down
- end
- # X比Y的绝对值小时
- else
- sy > 0 ? move_up : move_down
- if not moving? and sx != 0
- sx > 0 ? move_left : move_right
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 定义"从指定坐标返回"的方法
- #--------------------------------------------------------------------------
- def move_away_from_position(x, y)
- # 计算与目标坐标间的位移
- sx = @x - x
- sy = @y - y
- # 如果是当前所在坐标则返回
- if sx == 0 and sy == 0
- return
- end
- # 设置XY的绝对值变量
- abs_sx = sx.abs
- abs_sy = sy.abs
- # XY的绝对值相等时
- if abs_sx == abs_sy
- # X或Y自加1
- rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
- end
- # X比Y的绝对值大时
- if abs_sx > abs_sy
- sx > 0 ? move_right : move_left
- if not moving? and sy != 0
- sy > 0 ? move_down : move_up
- end
- # X比Y的绝对值小时
- else
- sy > 0 ? move_down : move_up
- if not moving? and sx != 0
- sx > 0 ? move_right : move_left
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 定义"面向某事件"的方法
- #--------------------------------------------------------------------------
- def turn_toward_event(id)
- # 计算与需要面向的事件间的位移
- sx = @x - $game_map.events[id].x
- sy = @y - $game_map.events[id].y
- # 如果是当前所在坐标则返回
- if sx == 0 and sy == 0
- return
- end
- # X比Y的绝对值大时
- if sx.abs > sy.abs
- # X的值为正则转左,负则转右
- sx > 0 ? turn_left : turn_right
- # X比Y的绝对值小时
- else
- # Y的值为正则转上,负则转下
- sy > 0 ? turn_up : turn_down
- end
- end
- #--------------------------------------------------------------------------
- # ● 定义"背向某事件"的方法
- #--------------------------------------------------------------------------
- def turn_away_from_event(id)
- # 计算与需要背向的事件间的位移
- sx = @x - $game_map.events[id].x
- sy = @y - $game_map.events[id].y
- # 如果是当前所在坐标则返回
- if sx == 0 and sy == 0
- return
- end
- # X比Y的绝对值大时
- if sx.abs > sy.abs
- # X的值为正则转右,负则转左
- sx > 0 ? turn_right : turn_left
- # X比Y的绝对值小时
- else
- # Y的值为正则转下,负则转上
- sy > 0 ? turn_down : turn_up
- end
- end
- #--------------------------------------------------------------------------
- # ● 定义"面向某一坐标"的方法
- #--------------------------------------------------------------------------
- def turn_toward_position(x, y)
- # 计算与指定坐标间的位移
- sx = @x - x
- sy = @y - y
- # 如果是当前所在坐标则返回
- if sx == 0 and sy == 0
- return
- end
- # X比Y的绝对值大时
- if sx.abs > sy.abs
- sx > 0 ? turn_left : turn_right
- # X比Y的绝对值小时
- else
- sy > 0 ? turn_up : turn_down
- end
- end
- #--------------------------------------------------------------------------
- # ● 定义"背向某一坐标"的方法
- #--------------------------------------------------------------------------
- def turn_away_from_position(x, y)
- # 计算与指定坐标间的位移
- sx = @x - x
- sy = @y - y
- # 如果是当前所在坐标则返回
- if sx == 0 and sy == 0
- return
- end
- # X比Y的绝对值大时
- if sx.abs > sy.abs
- sx > 0 ? turn_right : turn_left
- # X比Y的绝对值小时
- else
- sy > 0 ? turn_down : turn_up
- end
- end
- #--------------------------------------------------------------------------
- # ● 定义"随机范围移动"的方法
- #--------------------------------------------------------------------------
- def move_random_area(x, y, distance)
- # 计算与目标原点区域中心间的位移
- sx = @x - x
- sy = @y - y
- # 如果已经在范围外
- if sx.abs + sy.abs > distance
- # 接近区域中心
- move_toward_position(x, y)
- return
- end
- # 在范围内时随机选择方向移动
- case rand(4)
- when 0 # 向下移动
- if sx.abs + sy < distance
- move_down(false)
- end
- when 1 # 向左移动
- if -sx + sy.abs < distance
- move_left(false)
- end
- when 2 # 向右移动
- if sx + sy.abs < distance
- move_right(false)
- end
- when 3 # 向上移动
- if sx.abs - sy < distance
- move_up(false)
- end
- end
- end
- end
复制代码 希望能从某种程度上帮助到布丁{:nm_4:}
获取特定事件就如同18L在那里插入的for循环一样添加就好.不过建议在调用行为外使用?因为这些行为也许可以用于NPC的AI,而不仅仅是敌人 |
评分
-
查看全部评分
|