查看: 3297|回复: 12

[已经解决] 如何检测地图某位置是否有事件存在?

[复制链接]
梦石
8
星屑
3963
在线时间
397 小时
注册时间
2017-10-11
回帖
114
发表于 2017-10-26 00:03:36 | 显示全部楼层 |阅读模式

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

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

×
我想到的方法是这样的:
想要用for in的处理方式去批量检测地图的事件,例如for n in 1..99,
代入$game_map.events[n]的XY值一一检测,
但是呢,假如事件数最高没达到99就会出现nil的错误,所以求解,怎么解决,或者是有没有更好的方法。
梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 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 认可答案

查看全部评分

回复

使用道具 举报

梦石
8
星屑
3963
在线时间
397 小时
注册时间
2017-10-11
回帖
114
 楼主| 发表于 2017-10-26 00:56:06 | 显示全部楼层
guoxiaomi 发表于 2017-10-26 00:23
$game_map.events.values.each do |e|
  ...
end

漏了一点,有一些事件是处理完的,最后一页就是空白页那些,也算进来了,如何剔除这些空白页的?
回复

使用道具 举报

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

发表于 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
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复

使用道具 举报

梦石
8
星屑
3963
在线时间
397 小时
注册时间
2017-10-11
回帖
114
 楼主| 发表于 2017-10-26 11:57:13 | 显示全部楼层
SailCat 发表于 2017-10-26 07:30
if e.pages[e.pages.length - 1].character_name == ""

QQ图片20171026115105.png
e.pages[e.pages.length - 1].character_name == "" 出现上面的错误

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

使用道具 举报

梦石
0
星屑
14555
在线时间
22062 小时
注册时间
2010-10-24
回帖
302
发表于 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
噫
回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2017-10-26 12:28:59 | 显示全部楼层
for i in $game_map.events

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

回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2017-10-26 13:08:47 | 显示全部楼层
[pre lang="ruby"]$game_map.events.values.each do |e|
if e.character_name != ""
end[/pre]

评分

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

查看全部评分

回复

使用道具 举报

梦石
0
星屑
9862
在线时间
580 小时
注册时间
2017-9-28
回帖
203
发表于 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
喵喵喵
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部