Project1

标题: VX中如何让NPC拥有视野? [打印本页]

作者: 0newing    时间: 2012-6-20 18:57
标题: VX中如何让NPC拥有视野?
本帖最后由 0newing 于 2012-11-15 17:47 编辑

玩过一个叫《萝莉的远征:幽灵行动》的游戏,想知道怎么做出这种效果,见图:

就是NPC可以有视野,看见主角行动加快,或者实行其他的动作。
请指导,谢谢……
作者: 怪蜀黍    时间: 2012-6-21 20:27

作者: 铅笔描绘的思念    时间: 2012-6-21 20:32
本帖最后由 铅笔描绘的思念 于 2012-6-21 20:35 编辑

完全可以用事件做到
先把1号变量代入主角的X坐标
先把2号变量代入主角的Y坐标
先把3号变量代入事件的X坐标
先把4号变量代入事件的Y坐标
在条件分歧 如果3号变量等于大于1号变量
  则 5号 变量代入  脚本 $game_variables[3]- $game_variables[1]
否则 5号 变量代入  脚本 $game_variables[1]- $game_variables[3]
结束

条件分歧 如果4号变量等于大于2号变量
  则 6号 变量代入  脚本 $game_variables[4]- $game_variables[2]
否则 6号 变量代入  脚本 $game_variables[2]- $game_variables[4]
结束

再条件分歧 如果 5号 变量 小于等于  2 时 (2的话那么事件的X轴视野就是2)
   条件分歧 如果 6号 变量 小于等于  2 时 (2的话那么事件的Y轴视野就是2)
  #这里就是实现的效果。。显示心情啊什么的。。。
  #如果要追踪主角的话那应该要打开独立开关A啊什么的。。。
  #设置事件二 条件是独立开关A打开  移动类型是接近 触发条件是与事件接触  在战斗啊什么的。。。
  #还要 条件分歧
  #当变量5大于2且变量6大于2时  独立开关A关闭  
结束
结束




附上脚本版
RUBY 代码复制
  1. #==============================================================================
  2. #-------------------------怪物追跡-------------------------------------------------------
  3.  
  4. #------------------[url]http://blog.sina.com.cn/rpgs---------------------------------------[/url]
  5.  
  6. #使用方法,在事件的名称上加enemy
  7. #在运动规则 类型——随机
  8. #            速度——自己选(别太快,别高过反应后的速度)
  9. #            频率——最高
  10. #与事件接触
  11. #然后在内容加个战斗就OK了
  12. #不知道怎么用的可以跟我拿范例
  13. #animation_id =怪物反应动画 57,82行
  14. #move_speed =怪物反应后的速度 1为最低,5为最高
  15. #名字可以自己改在53,54行。
  16. #============================================================================
  17. # ■ Game_Character
  18. #==============================================================================
  19. class Game_Character
  20.   #--------------------------------------------------------------------------
  21.   # ● 更新
  22.   #--------------------------------------------------------------------------
  23.   alias update_n03 update
  24.   def update
  25.     update_n03
  26.     seek_player
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ●用追跡判定
  30.   #--------------------------------------------------------------------------
  31.   def distance_player
  32.     return false if (@x - $game_player.x).abs > 3
  33.     return false if (@y - $game_player.y).abs > 3
  34.     return true
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ●用追跡判定
  38.   #--------------------------------------------------------------------------
  39.   def distance_player2
  40.     return true if (@y - $game_player.y) == 0
  41.     return false
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 用追跡判定
  45.   #--------------------------------------------------------------------------
  46.   def sight_out
  47.     return false if (@x - $game_player.x).abs < 5
  48.     return false if (@y - $game_player.y).abs < 5
  49.     return true
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 用追跡判定
  53.   #--------------------------------------------------------------------------
  54.   def seek_player
  55.     return if @event == nil
  56.     return special_seek if @event.name == "enemy2"
  57.     return if @event.name != "enemy"
  58.     return if @transparent
  59.     if !@seeking && distance_player
  60.       @animation_id = 93
  61.       @remain = [@move_type, @move_speed]
  62.       @seeking = true
  63.       @move_type = 2
  64.       @move_speed = 3
  65.     elsif @seeking && sight_out
  66.       @seeking = false
  67.       if @remain != nil
  68.         @move_type = @remain[0]
  69.         @move_speed = @remain[1]
  70.       end
  71.     end
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 特殊追跡
  75.   #--------------------------------------------------------------------------
  76.   def special_seek
  77.     if !@seeking && distance_player2
  78.       @animation_id = 93
  79.       @remain = [@move_type, @move_speed]
  80.       @seeking = true
  81.       @move_type = 2
  82.       @move_speed = 4
  83.     end
  84.   end
  85.  
  86. end


作者: 0newing    时间: 2012-6-21 20:43
铅笔描绘的思念 发表于 2012-6-21 20:32
完全可以用事件做到
先把1号变量代入主角的X坐标
先把2号变量代入主角的Y坐标

还是贴个范例吧,我不太明白{:2_257:}
作者: 0newing    时间: 2012-6-21 20:47
protosssonny 发表于 2012-6-21 20:27

第二和第三页写什么啊?
作者: 怪蜀黍    时间: 2012-6-21 20:52
本帖最后由 protosssonny 于 2012-6-21 20:53 编辑
0newing 发表于 2012-6-21 20:47
第二和第三页写什么啊?


第2页就写敌人的反应:执行条件为“独立开关A为ON”,移动类型为“接近”,事件执行条件为“与主角接触”,然后就是战斗什么的,自己设置即可,战斗结束后,独立开关B为ON。
第3页执行条件为“独立开关B为ON”,事件页留空白。表明战斗结束后,NPC消失。
作者: 0newing    时间: 2012-6-21 21:19
protosssonny 发表于 2012-6-21 20:52
第2页就写敌人的反应:执行条件为“独立开关A为ON”,移动类型为“接近”,事件执行条件为“与主角接触” ...

追到看不见的时候还要恢复到原来的事件页,这一点没有似乎考虑到吧?
作者: 怪蜀黍    时间: 2012-6-21 21:30
0newing 发表于 2012-6-21 21:19
追到看不见的时候还要恢复到原来的事件页,这一点没有似乎考虑到吧?

那你第2页不是加一个并行处理,像第一页那样设置坐标,大于多少时“独立开关A OFF”就可以了。
作者: 0newing    时间: 2012-6-21 21:39
protosssonny 发表于 2012-6-21 21:30
那你第2页不是加一个并行处理,像第一页那样设置坐标,大于多少时“独立开关A OFF”就可以了。 ...

问题是同时,追到了还要执行事件的啊。这两样要兼有
作者: 0newing    时间: 2012-11-14 23:10
本帖最后由 0newing 于 2012-11-14 23:16 编辑

到了我完成了,结帖~~    发上来给大家看看吧,差点就忘了,发的晚了点,见谅,见谅~~
抓人的话,事件与角色的坐标不会相等(除非穿透 = on)
要同时显示心情,还要判断追逐过程是否被逃脱,以及追上时执行事件,引用一个公共事件应该能完成吧?
感谢铅笔描绘的思念提供的脚本,加上了显示心情(画蛇添足)……

Project2.zip

360.7 KB, 下载次数: 87


作者: Ceopal    时间: 2012-11-15 00:21
你们这不是视野,这是感知能力……

视野只能看到前方,可以再设四个开关,用来标记NPC面所朝方向
作者: 0newing    时间: 2012-11-15 08:43
Ceopal 发表于 2012-11-15 00:21
你们这不是视野,这是感知能力……

视野只能看到前方,可以再设四个开关,用来标记NPC面所朝方向 ...

好的,逐步完善~{:2_261:}




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