class Game_Character
#--------------------------------------------------------------------------
# ● 接近
#--------------------------------------------------------------------------
# 使用方法 :
# 事件=>设置移动路线=>脚本=>输入=>toward(目标的X坐标, 目标的Y坐标)
# 可以单方向接近,只需把“目标的X坐标”或者“目标的Y坐标”传nil就可以
#--------------------------------------------------------------------------
# 目标的X既可以是主角也可以是事件甚至可以是纯坐标
# 主角的X坐标 $game_player.x
# 主角的Y坐标 $game_player.y
# 事件的X坐标 $game_map.events[事件的id].x
# 事件的T坐标 $game_map.events[事件的id].y
#--------------------------------------------------------------------------
def toward(x = nil, y = nil)
return if x == nil and y == nil
if x == nil
# 求坐标差
sy = @y - y
return if sy == 0
sy > 0 ? move_up : move_down
elsif y == nil
# 求坐标差
sx = @x - x
return if sx == 0
sx > 0 ? move_left : move_right
else
# 求坐标差
sx = @x - x
sy = @y - y
# 绝对值
abs_sx = sx.abs
abs_sy = sy.abs
return if abs_sx <= 1 and abs_sy <= 1
# 横距离与纵距离相等的情况下
if abs_sx == abs_sy
# 随机将边数增加 1
rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
end
# 横侧距离长的情况下
if abs_sx > abs_sy
# 左右方向优先。向主角移动
sx > 0 ? move_left : move_right
if not moving? and sy != 0
sy > 0 ? move_up : move_down
end
# 竖侧距离长的情况下
else
# 上下方向优先。向主角移动
sy > 0 ? move_up : move_down
if not moving? and sx != 0
sx > 0 ? move_left : move_right
end
end
end