def move_left(turn_enabled = true) # 面向左 if turn_enabled turn_left end # 可以通行的情況下 if passable?(@x, @y, 4) # 面向左 turn_left # 更新座標 @x -= 1 # 增加步數 increase_steps move_toward_npc # 不能通行的情況下 else # 接觸事件的啟動判定 check_event_trigger_touch(@x-1, @y) end end
def move_left(turn_enabled = true)
# 面向左
if turn_enabled
turn_left
end
# 可以通行的情況下
if passable?(@x, @y, 4)
# 面向左
turn_left
# 更新座標
@x -= 1
# 增加步數
increase_steps
move_toward_npc
# 不能通行的情況下
else
# 接觸事件的啟動判定
check_event_trigger_touch(@x-1, @y)
end
end
调用以下方法
其他方向移动也是照样样加个方法
# ● 接近NPC #-------------------------------------------------------------------------- def move_toward_npc nsx = [] nsy = [] tsx = [] tsy = [] nxy = [] #p $game_map.events[1] for i in 1..$game_map.events.id.size-1 nsx.push(@x.abs - $game_map.events[i].x.abs) nsy.push(@y.abs - $game_map.events[i].y.abs) tsx.push($game_map.events[i].x) tsy.push($game_map.events[i].y) end for i in 0..nsx.size-1 nxy.push(nsx[i]+nsy[i]) end for i in 0..nxy.size-1 if nxy[i] == nxy.min #npcxy = i tnpcx = tsx[i] tnpcy = tsy[i] break end end # 求得与npc的坐标差 sx = @x - tnpcx sy = @y - tnpcy #p tnpcy # 坐标相等情况下 if sx == 0 and sy == 0 return end # 求得差的绝对值 abs_sx = sx.abs abs_sy = sy.abs # 横距离与纵距离相等的情况下 if abs_sx == abs_sy # 随机将边数增加 1 rand(2) == 0 ? abs_sx += 1 : abs_sy += 1 end # 横侧距离长的情况下 if abs_sx <= 2 # 左右方向优先。向NPC移动 sx > 0 ? move_left : move_right if not moving? and sy != 0 sy > 0 ? move_up : move_down end # 竖侧距离长的情况下 elsif abs_sy <= 2 # 上下方向优先。向NPC移动 sy > 0 ? move_up : move_down if not moving? and sx != 0 sx > 0 ? move_left : move_right end end end
# ● 接近NPC
#--------------------------------------------------------------------------
def move_toward_npc
nsx = []
nsy = []
tsx = []
tsy = []
nxy = []
#p $game_map.events[1]
for i in 1..$game_map.events.id.size-1
nsx.push(@x.abs - $game_map.events[i].x.abs)
nsy.push(@y.abs - $game_map.events[i].y.abs)
tsx.push($game_map.events[i].x)
tsy.push($game_map.events[i].y)
end
for i in 0..nsx.size-1
nxy.push(nsx[i]+nsy[i])
end
for i in 0..nxy.size-1
if nxy[i] == nxy.min
#npcxy = i
tnpcx = tsx[i]
tnpcy = tsy[i]
break
end
end
# 求得与npc的坐标差
sx = @x - tnpcx
sy = @y - tnpcy
#p tnpcy
# 坐标相等情况下
if sx == 0 and sy == 0
return
end
# 求得差的绝对值
abs_sx = sx.abs
abs_sy = sy.abs
# 横距离与纵距离相等的情况下
if abs_sx == abs_sy
# 随机将边数增加 1
rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
end
# 横侧距离长的情况下
if abs_sx <= 2
# 左右方向优先。向NPC移动
sx > 0 ? move_left : move_right
if not moving? and sy != 0
sy > 0 ? move_up : move_down
end
# 竖侧距离长的情况下
elsif abs_sy <= 2
# 上下方向优先。向NPC移动
sy > 0 ? move_up : move_down
if not moving? and sx != 0
sx > 0 ? move_left : move_right
end
end
end
|