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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
14626
在线时间
2197 小时
注册时间
2019-1-24
帖子
1123

R考场第七期纪念奖

跳转到指定楼层
1
发表于 2019-4-10 15:18:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 miantouchi 于 2019-4-11 17:27 编辑

# 生成各种游戏对像
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
Scene_Title 里面生成这些对象,
我发现并不是声明数组元素,但是可以直接使用
如:$game_variables[$1.to_i]
$game_actors[$1.to_i].name等等,这是怎么个情况。
.name我在F1 Array里面没有发现.name这个属性?

1.jpg (235.95 KB, 下载次数: 14)

1.jpg

2.jpg (232.69 KB, 下载次数: 18)

2.jpg

Lv5.捕梦者

梦石
0
星屑
39021
在线时间
5719 小时
注册时间
2006-11-10
帖子
6619
2
发表于 2019-4-10 15:49:57 | 只看该作者
记得以前做过一个实验  $a = 某个窗口.new 么, 用全局变量赋予实例, 这样就可以在各种地方调用它的方法了.

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

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

f = [1,2,3]   
p f.class #=>  ?
p f[1].class #=> ?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14626
在线时间
2197 小时
注册时间
2019-1-24
帖子
1123

R考场第七期纪念奖

3
 楼主| 发表于 2019-4-10 16:32:44 | 只看该作者
灯笼菜刀王 发表于 2019-4-10 15:49
记得以前做过一个实验  $a = 某个窗口.new 么, 用全局变量赋予实例, 这样就可以在各种地方调用它 ...

结果不是数组,是这些类Game类,Fixnum没接触过
$game_actors[$1.to_i].class 属于Game_Actor这个类,我看这个类里面有name,
所以$game_actors[$1.to_i].name这里面的.name使用的Game_Actor这个类里面的实例变量(如图)
我理解的对不对
更多图片 小图 大图
组图打开中,请稍候......

点评

当然, 因为你主楼第一张图就是赋予了给这些全局变量赋予实例, 它当然可以用那些实例的方法  发表于 2019-4-10 17:49
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
帖子
131

开拓者

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

点评

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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39592
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

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

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 08:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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