Project1

标题: 关于关联窗口 [打印本页]

作者: 龙腾天下    时间: 2011-7-5 21:40
标题: 关于关联窗口
本帖最后由 龙腾天下 于 2011-7-6 15:53 编辑

如下:   
   # 生成帮助窗口、物品窗口
    @help_window = Window_Help.new
    @item_window = Window_Item.new
    # 关联帮助窗口
    @item_window.help_window = @help_window  

谁能说说怎么样关联窗口?还有以上红色字体中,是不是把help_window变成方法了?(若是在哪里定义了?若不是,那这是什么…………)

又假如在哪个类中定义了,那么从外面的不同类中可以调用?(假如不是父类与子类的关系)
作者: fux2    时间: 2011-7-5 22:00
本帖最后由 fux2 于 2011-7-5 22:08 编辑

只是把@item_window的help_window属性赋值成一个WIndow类而已,就是@help_window  
作者: 龙腾天下    时间: 2011-7-5 22:09
fux2 发表于 2011-7-5 22:00
@item_window只是把help_window赋值成一个WIndow类而已,就是@help_window

呃……算我不够聪明,我不是很明白……

把help_window赋值成一个WIndow类,那么(用数学几何的角度,以下“=”是真的等于号):

@item_window.help_window = @help_window =  Window_Help.new

是这样吗?
只是 @item_window.help_window 这里不太明白。能否再解释一下?

作者: 熊猫    时间: 2011-7-5 22:12
首先声明我不熟悉RUBY以及RGSS,完全现看现卖。
我认为这里可以理解为将@item_window.help_window指向先前建立的@help_window这个对象,从而可以通过调用@item_window.help_window来调用先前建立的@help_window对象。
我感觉并不仅仅是将help_window的属性附了过去,而是直接指向,这里包括属性、方法等等都过关联去了。(说白了就是让@item_window.help_window指向了@help_window的对象地址)

help_window这个有事先定义的:
1.通过这句"@item_window = Window_Item.new",我们找"Window_Item"这个脚本。
2.在"Window_Item"中,并没有发现"help_window"关键字。接下来通过第七行的"class Window_Item < Window_Selectable"去找"Window_Selectable"脚本
3.在"Window_Selectable"脚本中,我们看到12行"attr_reader   :help_window",还有下面有def定义"def help_window=(help_window)"。

这样的话,我做了一个实验,在"Window_Selectable"中加入:
attr_reader   :hell
def hell=(hell)
      p "已经关联"
end
发现在"Scene_Item"中,你那红色句的下一行加入"@item_window.hell = @help_window"就可以成功输出"已经关联"了。
不知道这是否解答了你"谁能说说怎么样关联窗口?"的问题。
作者: fux2    时间: 2011-7-5 22:19
本帖最后由 fux2 于 2011-7-5 22:19 编辑
龙腾天下 发表于 2011-7-5 22:09
呃……算我不够聪明,我不是很明白……

把help_window赋值成一个WIndow类,那么(用数学几何的角度,以 ...


@item_window本身就有一个help_window属性,属性跟变量差不多,要是不知道赶紧去看手册
作者: 熊猫    时间: 2011-7-5 22:20
龙腾天下 发表于 2011-7-5 22:09
呃……算我不够聪明,我不是很明白……

把help_window赋值成一个WIndow类,那么(用数学几何的角度,以 ...

@item_window.help_window = @help_window =  Window_Help.new
@help_window实际上是一个对象地址存储变量,存储的值即为Window_Help.new的地址。
@item_window.help_window 也是一个对象地址存储变量
@item_window.help_window = @help_window
也就是将@help_window的值赋给@item_window.help_window
@item_window.help_window <=赋值 @help_window 指向=>  Window_Help.new

本人是RGSS+RUBY菜鸟
作者: 龙腾天下    时间: 2011-7-5 22:34
熊猫 发表于 2011-7-5 22:12
首先声明我不熟悉RUBY以及RGSS,完全现看现卖。
我认为这里可以理解为将@item_window.help_window指向先前 ...

还真是有点难以理解。那参数也关联过去了?
作者: 熊猫    时间: 2011-7-5 22:49
龙腾天下 发表于 2011-7-5 22:34
还真是有点难以理解。那参数也关联过去了?

参数??Window_Help.new本身没有任何参数啊?
是函数?方法?
上面提到了直接指向之前的那个对象(Window_Help.new),所以说用起来都是一样的。
@item_window.help_window.xxx
@help_window.xxx
完全相同。
如果想要知道关联窗口间是怎样互动的,可以参照
脚本"Window_Selectable"中的第87行。
还有
脚本"Window_Item"中的第100行。




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