加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 七重 于 2016-9-19 13:53 编辑
关于想要改写“移动路线”指令中的“接近人物”的方式。
默认的接近玩家的方式是这样的:
先正方向接近玩家,再斜方向接近玩家。
我希望修改成这样:
先斜方向接近玩家,之后再正方向接近玩家。
并且斜方向接近的时候是用move_diagonal(x, y)来进行移动。(即斜方向移动命令)
==
自己看了一下接近人物的代码,不太明白move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0这句的涵义。
说起来假如把!@move_succeed注释掉的话接近方式会变成瞬移。。。
def move_toward_character(character)
sx = distance_x_from(character.x)
sy = distance_y_from(character.y)
if sx.abs > sy.abs
move_straight(sx > 0 ? 4 : 6)
move_straight(sy > 0 ? 8 : 2) if sy != 0
elsif sy != 0
move_straight(sy > 0 ? 8 : 2)
move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
end
end
==
追记:忽然又知道怎么写了。。窝先自己写一下。。
黄图画多了之后感觉就有变笨了的感觉。。
==
这样就行了。
def move_toward_character(character)
sx = distance_x_from(character.x)
sy = distance_y_from(character.y)
if sx.abs == 0 && sy.abs != 0
move_straight(sy > 0 ? 8 : 2)
elsif sy.abs == 0 && sx.abs != 0
move_straight(sx > 0 ? 4 : 6)
elsif
move_diagonal((sx > 0 ? 4 : 6), (sy > 0 ? 8 : 2))
end
end
--
不过我还是不知道为什么原来的脚本上要设定一个!@move_succeed。
这个脚本的作用是配合arpg使用的,让敌人变得聪明一点,假如是近身攻击的怪物用原来的移动方式就好了。
但是假如是远程的怪物可以换成这个。
虽然实际感受是。。。并没有变聪明。。
==
完善,修改了转向,让敌人随时都能面对向着玩家
其实还可以在地图上并行一个控制开关的事件,实现随机选择一种行动模式。
比如是每3秒换一次行动模式,让敌人行动更加没有规律。
默认开关[1]控制。
def move_toward_character(character) sx = distance_x_from(character.x) sy = distance_y_from(character.y) if sx < 0 if sy > 0 set_direction(sx.abs > sy.abs ? 6 : 2) else set_direction(sx.abs > sy.abs ? 6 : 8) end else if sy < 0 set_direction(sx.abs > sy.abs ? 4 : 8) else set_direction(sx.abs > sy.abs ? 4 : 2) end end if $game_switches[1] != true if sx.abs == 0 && sy.abs != 0 move_straight(sy > 0 ? 8 : 2) elsif sy.abs == 0 && sx.abs != 0 move_straight(sx > 0 ? 4 : 6) elsif move_diagonal((sx > 0 ? 4 : 6), (sy > 0 ? 8 : 2)) end else if sx.abs > sy.abs move_straight(sx > 0 ? 4 : 6) move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0 elsif sy != 0 move_straight(sy > 0 ? 8 : 2) move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0 end end end
def move_toward_character(character)
sx = distance_x_from(character.x)
sy = distance_y_from(character.y)
if sx < 0
if sy > 0
set_direction(sx.abs > sy.abs ? 6 : 2)
else
set_direction(sx.abs > sy.abs ? 6 : 8)
end
else
if sy < 0
set_direction(sx.abs > sy.abs ? 4 : 8)
else
set_direction(sx.abs > sy.abs ? 4 : 2)
end
end
if $game_switches[1] != true
if sx.abs == 0 && sy.abs != 0
move_straight(sy > 0 ? 8 : 2)
elsif sy.abs == 0 && sx.abs != 0
move_straight(sx > 0 ? 4 : 6)
elsif
move_diagonal((sx > 0 ? 4 : 6), (sy > 0 ? 8 : 2))
end
else
if sx.abs > sy.abs
move_straight(sx > 0 ? 4 : 6)
move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0
elsif sy != 0
move_straight(sy > 0 ? 8 : 2)
move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
end
end
end
|