查看: 2456|回复: 4

[已经解决] 关于Game_SelfSwitches的问题

[复制链接]
梦石
0
星屑
15080
在线时间
1581 小时
注册时间
2012-7-24
回帖
1246
发表于 2014-2-14 23:36:55 | 显示全部楼层 |阅读模式

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

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

×
RT,前面Game_Switches和Game_Variables基本上都看懂了,但是看到这个脚本时又迷茫了{:2_270:}
1.请问这里的key是什么呢 注释那里说是键,指的是A,B,C,D吗?
2.[pre lang="ruby" line="1"]  def [](key)
    return @data[key] == true ? true : false
  end
[/pre]这一段写得好简洁,请问前面获取开关和变量时可否也写成类似的形式呢
就是[pre lang="ruby" line="1"]  def [](switch_id)
    if switch_id <= 5000 and @data[switch_id] != nil
      return @data[switch_id]
    else
      return false
    end
  end[/pre]

欢迎大家加我
梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2014-2-15 00:13:52 | 显示全部楼层
1.这里的键不是独立开关里的ABCD...而是以地图ID 地图中事件的ID以及ABCD 组成的数组
2.貌似可以,请楼主自行尝试

补充一下哈希
哈希是以"键"与值建立对应关系的数据结构
在数组中,对值的访问是通过访问下标完成的,而这些下标是非负数
而在哈希中."键"就可以理解为数组中的下标,只不过"键"不但可以是数值,而且也可以是其他东西,比如例子中为数组
所以,数组可以看作特殊的哈希

点评

在使用上Array像是特殊的Hash,但是实现上.......................  发表于 2014-2-15 19:18

评分

参与人数 2星屑 +100 收起 理由
天地有正气 + 80 大家拿糖。。
化螺耕 + 20 认可答案,糖不多,见谅=_=

查看全部评分

(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

梦石
0
星屑
122
在线时间
552 小时
注册时间
2012-8-18
回帖
1392
发表于 2014-2-15 19:14:43 | 显示全部楼层
1.这里的 key 是一个由地图id 事件id 字符("A","B","C"...可以说任何对象都可以)组成的数组
2.开关和变量只是单纯的由非负整数作为索引的,因此使用数组即可,但是独立开关需要用数组做索引(其实用多维数组也行= =),因此我们需要使用散列表(Hash)
散列表是由对象做索引,建立到另一对象的映射的数据结构,在ruby里面可以使用任何对象,他的原理是通过散列函数...
3.在使用的时候我们也可以模仿Game_Variables做类似的数据结构

点评

我只是说明大体意思,所以就避开ABCD是字符串了...我是打比方,不说初始化的过程,如果所有独立开关被记录后就是我说的这样...当然你说的更准确  发表于 2014-2-17 14:43
认可答案,糖不多,见谅=_=  发表于 2014-2-16 15:25

评分

参与人数 2星屑 +90 收起 理由
天地有正气 + 80 认可答案
化螺耕 + 10 认可答案,糖不多,见谅=_=

查看全部评分

我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复

使用道具 举报

梦石
0
星屑
15080
在线时间
1581 小时
注册时间
2012-7-24
回帖
1246
 楼主| 发表于 2014-2-16 10:33:03 | 显示全部楼层
无脑之人 发表于 2014-2-15 19:14
1.这里的 key 是一个由地图id 事件id 字符("A","B","C"...可以说任何对象都可以)组成的数组
2.开关和变量 ...

第二点解释得好高深。。。。。。似懂非懂

欢迎大家加我
回复

使用道具 举报

聪仔

梦石
0
星屑
6187
在线时间
3077 小时
注册时间
2013-12-26
回帖
3076
发表于 2014-2-16 11:16:10 | 显示全部楼层
本帖最后由 正太君 于 2014-2-16 11:18 编辑

独立开关可以理解为这样一个哈希,它包含了所有地图中所有事件的4个独立开关,元素非常非常非常非常多
  1. $game_self_switches =
  2. {
  3. [MAP1,EVENT1,A] => false,[MAP1,EVENT1,B] => false,[MAP1,EVENT1,C] => false,[MAP1,EVENT1,D] => false,
  4. [MAP1,EVENT2,A] => false,[MAP1,EVENT2,B] => false,[MAP1,EVENT2,C] => false,[MAP1,EVENT2,D] => false,
  5. ………………………………………………
  6. [MAP1,EVENTn,A] => false,[MAP1,EVENTn,B] => false,[MAP1,EVENTn,C] => false,[MAP1,EVENTn,D] => false,
  7. ………………………………………………
  8. [MAP2,EVENT1,A] => false,[MAP2,EVENT1,B] => false,[MAP2,EVENT1,C] => false,[MAP2,EVENT1,D] => false,
  9. [MAP2,EVENT2,A] => false,[MAP2,EVENT2,B] => false,[MAP2,EVENT2,C] => false,[MAP2,EVENT2,D] => false,
  10. ………………………………………………
  11. [MAPm,EVENTn,A] => false,[MAPm,EVENTn,B] => false,[MAPm,EVENTn,C] => false,[MAPm,EVENTn,D] => false
  12. }
复制代码
其中[MAP,EVENT,A/B/C/D]表示一个有3个确定元素(地图ID、事件ID、独立开关号)的数组,这个数组对应独立开关ABCD,
如果我现在希望MAP为1,EVENT为2的事件独立开关C打开,那么就令这个哈希中的这个元素
[MAP1,EVENT2,C] => true,
其他元素保持不变,
每次独立开关操作的实质仅仅就是改变这个包含大量元素的哈希中的一个元素的对应值而已

点评

hash实际上并没有提前将它们初始化,她根本就不知道你将会把什么东西放进去,不过没有该主键的情况下他会返回nil【另外ABCD是字符串  发表于 2014-2-17 12:19
哈哈,谢啦,你解释得真详细,我全都明白啦~~  发表于 2014-2-16 15:23

评分

参与人数 2星屑 +90 收起 理由
天地有正气 + 80 认可答案
化螺耕 + 10 认可答案,糖不多,见谅=_=

查看全部评分

聪聪全国第三帅...
他们都叫我【人赢聪】
我的RM能力雷达图:

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部