Project1

标题: 如何检测地图某位置是否有事件存在? [打印本页]

作者: CCD0645    时间: 2017-10-26 00:03
标题: 如何检测地图某位置是否有事件存在?
我想到的方法是这样的:
想要用for in的处理方式去批量检测地图的事件,例如for n in 1..99,
代入$game_map.events[n]的XY值一一检测,
但是呢,假如事件数最高没达到99就会出现nil的错误,所以求解,怎么解决,或者是有没有更好的方法。

作者: guoxiaomi    时间: 2017-10-26 00:23
$game_map.events.values.each do |e|
  ...
end
作者: CCD0645    时间: 2017-10-26 00:56
guoxiaomi 发表于 2017-10-26 00:23
$game_map.events.values.each do |e|
  ...
end

漏了一点,有一些事件是处理完的,最后一页就是空白页那些,也算进来了,如何剔除这些空白页的?
作者: SailCat    时间: 2017-10-26 07:30
CCD0645 发表于 2017-10-26 00:56
漏了一点,有一些事件是处理完的,最后一页就是空白页那些,也算进来了,如何剔除这些空白页的? ...

if e.pages[e.pages.length - 1].character_name == ""
作者: CCD0645    时间: 2017-10-26 11:57
SailCat 发表于 2017-10-26 07:30
if e.pages[e.pages.length - 1].character_name == ""


e.pages[e.pages.length - 1].character_name == "" 出现上面的错误

而@list.empty?则是没有效果,就算是空白页,它还是判定为有事件

作者: imsy    时间: 2017-10-26 12:20
本帖最后由 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

作者: yang1zhi    时间: 2017-10-26 12:28
for i in $game_map.events

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


作者: soulsaga    时间: 2017-10-26 13:08
RUBY 代码复制
  1. $game_map.events.values.each do |e|
  2. if e.character_name != ""
  3. end


作者: hyrious    时间: 2017-10-26 14:00
条件分歧: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
复制代码





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