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

Project1

 找回密码
 注册会员
搜索
查看: 2599|回复: 12
打印 上一主题 下一主题

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

[复制链接]

Lv4.逐梦者

梦石
8
星屑
3943
在线时间
396 小时
注册时间
2017-10-11
帖子
154
跳转到指定楼层
1
发表于 2017-10-26 00:03:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
3943
在线时间
396 小时
注册时间
2017-10-11
帖子
154
3
 楼主| 发表于 2017-10-26 00:56:06 | 只看该作者
guoxiaomi 发表于 2017-10-26 00:23
$game_map.events.values.each do |e|
  ...
end

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

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23191
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

4
发表于 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] 到本站一游。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
3943
在线时间
396 小时
注册时间
2017-10-11
帖子
154
5
 楼主| 发表于 2017-10-26 11:57:13 | 只看该作者
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?则是没有效果,就算是空白页,它还是判定为有事件
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12294
在线时间
21818 小时
注册时间
2010-10-24
帖子
308
6
发表于 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
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

7
发表于 2017-10-26 12:28:59 | 只看该作者
for i in $game_map.events

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

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36432
在线时间
10798 小时
注册时间
2009-3-15
帖子
4814
8
发表于 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 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9682
在线时间
570 小时
注册时间
2017-9-28
帖子
208
9
发表于 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
喵喵喵
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 23:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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