Project1
标题:
八方向靠近主角/远离主角算法(附上小翅膀)
[打印本页]
作者:
奶油Da蛋糕
时间:
2009-9-12 19:50
标题:
八方向靠近主角/远离主角算法(附上小翅膀)
=.=为了弄支持纸娃娃的小翅膀,我特意写了八方向的算法。
#--------------------------------------------------------------------------
# ● 接近主角
#--------------------------------------------------------------------------
def move_toward_player
# 求得与主角的坐标差
sx = @x - $game_player.x
sy = @y - $game_player.y
# 坐标相等情况下
if sx == 0 and sy == 0
return
end
# 求得差的绝对值
abs_sx = sx.abs
abs_sy = sy.abs
# 横距离与纵距离相等的情况下
if abs_sx == abs_sy
#if sx > 0
# if sy > 0
# move_upper_left
# elsif sy < 0
# move_lower_left
# end
#elsif sx < 0
# if sy > 0
# move_upper_right
#elsif sy < 0
# move_lower_right
#end
#end
rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
end
# 横侧距离长的情况下
if abs_sx > abs_sy
# 左右方向优先。向主角移动
# sx > 0 ? move_left : move_right
if sx > 0
if sy > 0
move_upper_left
elsif sy < 0
move_lower_left
else
move_left
end
else
if sy > 0
move_upper_right
elsif sy < 0
move_lower_right
else
move_right
end
end
if not moving? and sy != 0
sy > 0 ? move_up : move_down
end
# 竖侧距离长的情况下
else abs_sx < abs_sy
# 上下方向优先。向主角移动
#sy > 0 ? move_up : move_down
if sy > 0
if sx > 0
move_upper_left
elsif sx < 0
move_upper_right
else
move_up
end
else
if sx > 0
move_lower_left
elsif sx < 0
move_lower_right
else
move_down
end
end
if not moving? and sx != 0
sx > 0 ? move_left : move_right
end
end
end
#--------------------------------------------------------------------------
# ● 远离主角
#--------------------------------------------------------------------------
def move_away_from_player
# 求得与主角的坐标差
sx = @x - $game_player.x
sy = @y - $game_player.y
# 坐标相等情况下
if sx == 0 and sy == 0
return
end
# 求得差的绝对值
abs_sx = sx.abs
abs_sy = sy.abs
# 横侧距离长的情况下
if abs_sx > abs_sy
# 左右方向优先。向主角移动
# sx > 0 ? move_left : move_right
if sx > 0
if sy > 0
move_lower_right
elsif sy < 0
move_upper_right
else
move_right
end
else
if sy > 0
move_lower_left
elsif sy < 0
move_upper_left
else
move_left
end
end
if not moving? and sy != 0
sy > 0 ? move_down : move_up
end
# 竖侧距离长的情况下
else abs_sx < abs_sy
# 上下方向优先。向主角移动
#sy > 0 ? move_up : move_down
if sy > 0
if sx > 0
move_lower_right
elsif sx < 0
move_lower_left
else
move_down
end
else
if sx > 0
move_upper_right
elsif sx < 0
move_upper_left
else
move_up
end
end
if not moving? and sx != 0
sx > 0 ? move_right : move_left
end
end
end
复制代码
附上工程:
Project19.rar
(356.28 KB, 下载次数: 307)
2009-9-12 19:50 上传
点击文件名下载附件
作者:
waya
时间:
2009-9-12 20:57
支持!!其实对于美工来说这是最简单的合成一下,但脚本就完全不同了、大家好像灵活所为自己的专长努力着
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1