Project1

标题: 怎样让一个NPC跟随另一个随机移动的NPC走呢? [打印本页]

作者: snowball1981    时间: 2009-5-30 00:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: Ps_佡    时间: 2009-5-30 01:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: 「旅」    时间: 2009-5-30 01:41
class Game_Character
  def move_type_toward_character(event_id)
    # 求得与主角坐标的差
    sx = @x - $game_map.events[event_id].x
    sy = @y - $game_map.events[event_id].y
    # 求得差的绝对值
    abs_sx = sx > 0 ? sx : -sx
    abs_sy = sy > 0 ? sy : -sy
    # 如果纵横共计离开 20 个元件
    if sx + sy >= 20
      # 随机
      move_random
      return
    end
    # 随机 0~5 的分支
    case rand(6) #——————————————————————可以更改
    when 0..3  # 接近主角
      move_toward_character(event_id)
    when 4  # 随机
      move_random
    when 5  # 前进一步
      move_forward
    end
  end
  def move_toward_character(event_id)
    # 求得与主角的坐标差
    sx = @x - $game_map.events[event_id].x
    sy = @y - $game_map.events[event_id].y
    # 坐标相等情况下
    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 > 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
end

↓看不清楚请点击~

【移动规则】:自定义——【移动路线】——【脚本】:
move_type_toward_character(2)
(括号中的数字是 跟随事件的编号)
[LINE]1,#dddddd[/LINE]
如果觉得跟的人整天乱走,把【case rand(6)】(你翻下就知道在哪)
改为【case rand(4)】。那么就完全跟紧。
作者: snowball1981    时间: 2009-5-30 01:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: 凌辰    时间: 2009-5-30 02:00
以下引用snowball1981于2009-5-29 17:53:55的发言:
我创建事件,插入脚本,可是无法粘贴上面的脚本代码。
请问这些脚本代码放在哪里呢?还是我要亲自打上去?
粘贴前请先确定光标在右边的文本框内……
直接点击插入时,光标会在左边的脚本标题里。想要在短短的标题里粘上全部脚本,真是难为电脑了呢。
作者: 「旅」    时间: 2009-5-30 02:00

↑设置成这样,然后点击【移动路线】


↑右下角的【脚本】功能。插入move_type_toward_character(2)
作者: snowball1981    时间: 2009-5-30 02:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: 后知后觉    时间: 2009-5-30 02:45
以下引用snowball1981于2009-5-29 18:18:16的发言:

我没弄明白。
把脚本复制进去,然后按钮照做后,感觉怪怪的。
我的意思是:
人物 A 有固定路线 X ,人物B紧跟随人物 A 走路线 X 。
另外人物 C 有固定路线 Y ,人物 D 紧跟随人物 C 走路线 Y 。
地图上还人物 E 走固定路线 Z ,人物 F、G、H 跟随人物 E 走固定路线 Z 。

不是说要随机吗 怎么又变固定了{/fd}
作者: 「旅」    时间: 2009-5-30 03:45
以下引用snowball1981于2009-5-29 18:18:16的发言:

我没弄明白。
把脚本复制进去,然后按钮照做后,感觉怪怪的。
我的意思是:
人物 A 有固定路线 X ,人物B紧跟随人物 A 走路线 X 。
另外人物 C 有固定路线 Y ,人物 D 紧跟随人物 C 走路线 Y 。
地图上还人物 E 走固定路线 Z ,人物 F、G、H 跟随人物 E 走固定路线 Z 。

第二个图的不用模仿- -b

只保留【脚本:move_type_toward_character(2)】就可以了。

华丽的范例{/gg}
http://rpg.blue/upload_program/d/「旅」_Project3_124055125.rar
作者: ONEWateR    时间: 2009-5-30 04:25
pinbi
作者: snowball1981    时间: 2009-5-30 05:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: 「旅」    时间: 2009-5-30 05:55
move_type_toward_character(2)

这里的2就是跟随的编号。必须选对才可以

ps:工程右下角有显示编号的多少 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: snowball1981    时间: 2009-5-30 15:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: 失去的记忆    时间: 2009-5-30 15:54
事件A一定路线自定! 事件B移动路线和事件A的移动路线完全一样!(开通可能差一格。。)
其余事件照做即可!{/fd}{/fd}{/fd}




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1