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

Project1

 找回密码
 注册会员
搜索

[已解决]生成$game_xxxx对象,是数组吗?

查看数: 2174 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-4-10 15:18

正文摘要:

本帖最后由 miantouchi 于 2019-4-11 17:27 编辑 # 生成各种游戏对像     $game_temp          = Game_Temp.new     $game_system       ...

回复

KB.Driver 发表于 2019-4-10 17:51:33
我发现并不是声明数组元素,但是可以直接使用
如:$game_variables[$1.to_i]
$game_actors[$1.to_i].name等等,这是怎么个情况。
.name我在F1 Array里面没有发现.name这个属性?


面向对象编程里有一个重要的概念叫做鸭子类型(duck typing)
简单来讲就是,不要纠结一个对象具体是什么类的实例,而是看它是否具备某种方法

  1. $game_actors        = Game_Actors.new
复制代码

这句生成了一个Game_Actors对象,但是我们不要纠结它是什么
注意到Game_Actors里实现了[]与[]=方法,而且正好与数组的行为一致
因此我们根据鸭子类型,可以把$game_actors看成某种数组

对一个数组用[]就是取出里面的元素,在这里也是一样。
$game_actors[n]就是数据库中编号为n的角色(的唯一副本),这是一个Game_Actor对象
所以你可以看看Game_Actor里有没有定义name方法。

点评

233我疏忽了,那就是只有[]没有[]=,至少能像数组一样取元素。不过不能直接赋值  发表于 2019-4-10 23:18
Game_Actors只定义了[]这个方法  发表于 2019-4-10 20:02

评分

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

查看全部评分

mariofans 发表于 2019-4-10 17:42:30
就是对象,不是数组
能用$game_variables[xx]的原因是这个类里边定义了 [] 和 []= 方法

点评

头一次看见[] 和 []= 方法  发表于 2019-4-10 20:01

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 我很赞同

查看全部评分

灯笼菜刀王 发表于 2019-4-10 15:49:57
记得以前做过一个实验  $a = 某个窗口.new 么, 用全局变量赋予实例, 这样就可以在各种地方调用它的方法了.

这些一样道理, 把右边一大串的实例, 赋予左边一大串的全局变量, 方便在各个地方调用对应的方法

至于下面那个, 你p下它的class, 看看它是不是数组吧

f = [1,2,3]   
p f.class #=>  ?
p f[1].class #=> ?
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-5-16 06:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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