Project1

标题: [已解决]生成$game_xxxx对象,是数组吗? [打印本页]

作者: miantouchi    时间: 2019-4-10 15:18
标题: [已解决]生成$game_xxxx对象,是数组吗?
本帖最后由 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

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

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

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

f = [1,2,3]   
p f.class #=>  ?
p f[1].class #=> ?
作者: miantouchi    时间: 2019-4-10 16:32
灯笼菜刀王 发表于 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这个类里面的实例变量(如图)
我理解的对不对

1.jpg (244.39 KB, 下载次数: 24)

1.jpg

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

2.jpg

3.jpg (7.99 KB, 下载次数: 19)

3.jpg

4.jpg (9.8 KB, 下载次数: 18)

4.jpg

5.jpg (9.58 KB, 下载次数: 18)

5.jpg

6.jpg (253.5 KB, 下载次数: 19)

6.jpg

作者: mariofans    时间: 2019-4-10 17:42
就是对象,不是数组
能用$game_variables[xx]的原因是这个类里边定义了 [] 和 []= 方法
作者: KB.Driver    时间: 2019-4-10 17:51
我发现并不是声明数组元素,但是可以直接使用
如:$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方法。





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1