Project1

标题: 【疑问】怎么实现“被npc看见就游戏结束”事件? [打印本页]

作者: Kim_Shyuen    时间: 2017-10-30 00:53
标题: 【疑问】怎么实现“被npc看见就游戏结束”事件?
本帖最后由 Kim_Shyuen 于 2017-12-16 18:54 编辑

— 问题已解决




如题

→npc会随机移动,若是玩家被npc看见就会game over
→玩家可以躲在特定物体后以不被npc看见

请问各位大大,这样的事件要怎么实行呢?
谢谢你们了。


作者: 张咚咚    时间: 2017-10-30 02:12
https://rpg.blue/forum.php?mod=v ... =%E8%A7%86%E9%87%8E
作者: 芯☆淡茹水    时间: 2017-10-30 08:22
嘛~,没有详细的说明。
地图事件有多种,能够“看死”玩家的NPC是否需要标注一下?
是否有距离限制?
判断看见与否不难,直接判断NPC与玩家是否一条直线并且面向玩家。
至于 可遮挡 的障碍物,可以用 地形标志 识别。
作者: Kim_Shyuen    时间: 2017-11-6 11:24
芯☆淡茹水 发表于 2017-10-30 08:22
嘛~,没有详细的说明。
地图事件有多种,能够“看死”玩家的NPC是否需要标注一下?
是否有距离限制?

请问那个直接判断npc是否一条直线并且面向玩家该怎么实现呢?
作者: 芯☆淡茹水    时间: 2017-11-6 13:00
RUBY 代码复制
  1. #==============================================================================
  2. module X☆R
  3.   def self.saw(map_id,evevt_id)
  4.     return false if $game_map.map_id != map_id
  5.     return false if $game_map.event(evevt_id).nil?
  6.     return false if $game_map.event(evevt_id).character_name == ""
  7.     return false if $game_map.event(evevt_id).transparent
  8.     return false if !self.facing_player($game_map.event(evevt_id))
  9.     return false if self.has_screen($game_map.event(evevt_id))
  10.     return true
  11.   end
  12.   def self.has_screen(event)
  13.     if event.x == $game_player.x
  14.       (event.y..$game_player.y).each do |y|
  15.         return true if $game_map.terrain_tag(event.x, y) == 5
  16.       end
  17.     end
  18.     if event.y == $game_player.y
  19.       (event.x..$game_player.x).each do |x|
  20.         return true if $game_map.terrain_tag(x, event.y) == 5
  21.       end
  22.     end
  23.     return false
  24.   end
  25.   def self.facing_player(event)
  26.     if event.x == $game_player.x
  27.       return event.y > $game_player.y ? event.direction == 8 : event.direction == 2
  28.     elsif event.y == $game_player.y
  29.       return event.x > $game_player.x ? event.direction == 4 : event.direction == 6
  30.     end
  31.     return false
  32.   end
  33. end
  34. #==============================================================================
  35. class Game_Map
  36.   def event(evevt_id)
  37.     return @events[evevt_id]
  38.   end
  39. end
  40. #==============================================================================


用法是 事件->条件:脚本:X☆R.saw(map_id,evevt_id)
map_id  是会‘看死人’的事件所在的地图ID;
evevt_id 是会‘看死人’的事件ID;


事件用并行,遮挡物的地图图块标志是 5。

作者: Kim_Shyuen    时间: 2017-11-6 13:27
请问id该怎么填呀?不管是填008,08或8都会出现 Game_Interpreter line450 NameError  







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