查看: 3537|回复: 9

[已经解决] 【疑问】怎么实现“被npc看见就游戏结束”事件?

[复制链接]
梦石
4
星屑
9336
在线时间
889 小时
注册时间
2017-10-28
回帖
441
发表于 2017-10-30 00:53:38 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 Kim_Shyuen 于 2017-12-16 18:54 编辑

— 问题已解决 —




如题

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

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

梦石
0
星屑
19426
在线时间
3082 小时
注册时间
2013-1-11
回帖
1207
发表于 2017-10-30 02:12:24 | 显示全部楼层

点评

谢谢!  发表于 2017-10-30 11:59
回复

使用道具 举报

梦石
0
星屑
34460
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2017-10-30 08:22:24 | 显示全部楼层
嘛~,没有详细的说明。
地图事件有多种,能够“看死”玩家的NPC是否需要标注一下?
是否有距离限制?
判断看见与否不难,直接判断NPC与玩家是否一条直线并且面向玩家。
至于 可遮挡 的障碍物,可以用 地形标志 识别。

点评

没有距离限制_(:з」∠)_  发表于 2017-11-6 11:34
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
4
星屑
9336
在线时间
889 小时
注册时间
2017-10-28
回帖
441
 楼主| 发表于 2017-11-6 11:24:53 | 显示全部楼层
芯☆淡茹水 发表于 2017-10-30 08:22
嘛~,没有详细的说明。
地图事件有多种,能够“看死”玩家的NPC是否需要标注一下?
是否有距离限制?

请问那个直接判断npc是否一条直线并且面向玩家该怎么实现呢?
回复

使用道具 举报

梦石
0
星屑
34460
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2017-11-6 13:00:32 | 显示全部楼层
[pre lang="ruby"]#==============================================================================
module X☆R
  def self.saw(map_id,evevt_id)
    return false if $game_map.map_id != map_id
    return false if $game_map.event(evevt_id).nil?
    return false if $game_map.event(evevt_id).character_name == ""
    return false if $game_map.event(evevt_id).transparent
    return false if !self.facing_player($game_map.event(evevt_id))
    return false if self.has_screen($game_map.event(evevt_id))
    return true
  end
  def self.has_screen(event)
    if event.x == $game_player.x
      (event.y..$game_player.y).each do |y|
        return true if $game_map.terrain_tag(event.x, y) == 5
      end
    end
    if event.y == $game_player.y
      (event.x..$game_player.x).each do |x|
        return true if $game_map.terrain_tag(x, event.y) == 5
      end
    end
    return false
  end
  def self.facing_player(event)
    if event.x == $game_player.x
      return event.y > $game_player.y ? event.direction == 8 : event.direction == 2
    elsif event.y == $game_player.y
      return event.x > $game_player.x ? event.direction == 4 : event.direction == 6
    end
    return false
  end
end
#==============================================================================
class Game_Map
  def event(evevt_id)
    return @events[evevt_id]
  end
end
#==============================================================================[/pre]

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


事件用并行,遮挡物的地图图块标志是 5。
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
4
星屑
9336
在线时间
889 小时
注册时间
2017-10-28
回帖
441
 楼主| 发表于 2017-11-6 13:27:40 | 显示全部楼层
请问id该怎么填呀?不管是填008,08或8都会出现 Game_Interpreter line450 NameError  
77.JPG

点评

原来如此。谢谢~!>w<  发表于 2017-11-6 18:30
X☆R.saw(8,1)  发表于 2017-11-6 15:46
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部