Project1
标题:
请教initialize定义中有关new的用法(参考RPG自带的帮助教程)
[打印本页]
作者:
taeckle
时间:
2021-5-7 21:34
标题:
请教initialize定义中有关new的用法(参考RPG自带的帮助教程)
本帖最后由 taeckle 于 2021-5-7 21:38 编辑
小弟这两天潜心学习RPG自带的帮助教程,小弟才疏学浅,基本看不懂这个教程在讲什么,比如教程里提到的
对象初始化
,教程原文是这样描述的:
------------------------------------------------------------------------------------------------------------------------------------------------------------
生成对象时,把实变量初始化为某个特定的值。先定义一个名称为 initialize 的方法,在使用 new 生成新实例时会自动调用该方法。
class Person
def initialize
@name = "无名先生"
end
end
从第二行开始的 initialize 方法的定义,表示实变量 @name 的初始值被赋值为字符串 "无名先生"。这样,生成新的 Person 对象的时候,会自动以 "无名先生" 初始化实变量。
initialize 方法中设定有临时参数的情况下,new 会取该参数为初始值。
class Person
def initialize(name)
@name = name
end
end
alex = Person.new("艾力克斯")
上述示例中,initialize 方法里设定有临时参数 name,那么实变量 @name 的初始值就会使用该参数。参数 name 实际在 Person 类 new 时给予。最后一行,生成 Person 类对象时指定参数为 "艾力克斯",那么 @name 的初始值也就设定为 "艾力克斯"。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
请问下像上面这样的
类名称.new(Person.new)
到底是啥意思?有哪些
实战应用
意义? 调用数据还是创建数据呢?还有这个alex变量要如何才能应用到游戏的大地图事件里呢?
还请诸位指点一二,不胜感激!
作者:
enghao_lim
时间:
2021-5-9 01:17
你必须的区分类(class)与对象(object)。
Person是类
Person.new是生成一个Person的对象。
就用你的例子
alex = Person.new("艾力克斯")
复制代码
这时alex已经生成一个对象,你可以进行另一个对象生成。
ali = Person.new("阿里")
复制代码
alex于ali都属于Person类但是是各自独立的对象。
比如:
ali.name = "新阿里"
复制代码
ali重新赋予@name值可是alex的@name值并不会因此而改变,ali与alex完全独立。
至于你说的实战应用,其实rmxp脚本都是,与你的例子相近的属于Game_Battler,只是rm在Game_Battler下还细分Game_Actor与Game_Enemy子类。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1