设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

如何检测地图某位置是否有事件存在?

查看数: 2469 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-10-26 00:03

正文摘要:

我想到的方法是这样的: 想要用for in的处理方式去批量检测地图的事件,例如for n in 1..99, 代入$game_map.events[n]的XY值一一检测, 但是呢,假如事件数最高没达到99就会出现nil的错误,所以求解,怎么解决,或者 ...

回复

hyrious 发表于 2017-10-26 14:00:39
条件分歧:event_exist? 1, 2 # (1, 2) 位置有事件的话
不判断空事件格和暂时消除掉的事件,未测试
  1. def event_exist? x, y
  2.   $game_map.events.any? { |_id, e|
  3.     erased = e.instance_variable_get :@erased
  4.     erased || e.list.empty? ? false : e.x == x && e.y == y
  5.   }
  6. end
复制代码

点评

看看RPG::Event的说明,@list不可能是empty的,想其他办法吧……  发表于 2017-10-27 08:46
soulsaga 发表于 2017-10-26 13:08:47
RUBY 代码复制
  1. $game_map.events.values.each do |e|
  2. if e.character_name != ""
  3. end

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
CCD0645 + 1 认可答案

查看全部评分

yang1zhi 发表于 2017-10-26 12:28:59
for i in $game_map.events

for i in 1...$game_map.events.size

imsy 发表于 2017-10-26 12:20:53
本帖最后由 imsy 于 2017-10-26 12:24 编辑

我觉得可以试试看@list[@list.size - 1].size == 1
因为貌似无论有多少指令,@list里都至少有一个[#<RPG::EventCommand:0x6a0dac4
        @indent=0, @code=0, @parameters=[]]在里面作为最后1个指令

对于处理完了的事件,为何不直接判断其独立开关呢?
if $game_self_switches[[地图ID, 事件ID, "A"]]
暂时消除事件的话不知道能不能这样if $game_map.events[1].erased
SailCat 发表于 2017-10-26 07:30:57
CCD0645 发表于 2017-10-26 00:56
漏了一点,有一些事件是处理完的,最后一页就是空白页那些,也算进来了,如何剔除这些空白页的? ...

if e.pages[e.pages.length - 1].character_name == ""

点评

@list不可能是empty的……  发表于 2017-10-27 08:46
判断@list.empty?更合理吧  发表于 2017-10-26 11:11
CCD0645 发表于 2017-10-26 00:56:06
guoxiaomi 发表于 2017-10-26 00:23
$game_map.events.values.each do |e|
  ...
end

漏了一点,有一些事件是处理完的,最后一页就是空白页那些,也算进来了,如何剔除这些空白页的?
guoxiaomi 发表于 2017-10-26 00:23:27
$game_map.events.values.each do |e|
  ...
end

点评

解决了,多谢  发表于 2017-10-26 00:51

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
CCD0645 + 1 认可答案

查看全部评分

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-21 18:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表