类成员

阅读过程中请斟酌实例这两个词,理解它们的区别。

属性

属性定义于类,独立存在于每个实例中,是用来描述实例的,例如 LineEdit 的 text 属性就是描述这个输入框所输入的内容的。

$LineEdit.text

其中的 $LineEdit 就能获取到输入框实例,后面的点符号 . 可以理解成汉字 ,就是从实例中取某个成员。

再读一遍这句话:属性定义于类,独立存在于每个实例中。

属性定义于类,这是说属性是由类指定的,一个类的所有实例都有同样的属性,例如每个 LineEdit 实例都有 text 属性,而 TextureRect 类的实例则没有 text 属性。

属性独立存在于每个实例中,这是说每个实例的同名属性的值是不同的,比如现在有两个输入框,也就是两个 LineEdit 实例,我们可以在这两个输入框中输入不同的内容,也是说他们俩的 text 属性的值是不同的。

[!note] 三次元例子

咱已经知道手机是一个类,那么手机的颜色、电量、所有者这些就是手机的属性。

方法

方法表示实例能进行的动作。例如 LineEdit 有一个没参数的 clear 方法可以清空输入框的内容:

$LineEdit.clear()

或者想要删除某个节点,可以调用它的 free 方法:

$LineEdit.free()

[!note] 三次元例子

还是说手机,手机能够开机、打电话、玩游戏,这些手机能干的事情,就是手机的方法。

对象的属性还是对象

如果我们想让输入框的位置产生变化,那我们可以访问它的 position 属性,这个属性表示的是坐标,但坐标肯定不是一个数字,所以 position 的类型是 vector2,这个 vector2 也是一个类,而 position 属性存放的则是一个 vector2 实例,他有两个属性:xy,如果我们想让输入框向右下方移动一点,则可以:

$LineEdit.position.x += 100
$LineEdit.position.y += 100

[!tip]

向下移动是增加 y 值,因为 Godot 中的 2D 坐标系正方向是向下的,且原点在屏幕左上角。

[!note] 三次元例子

手机的所有者,这是个什么类型的数据?

在完整的面向对象程序中,应该还有一个人员类,那么很明显,手机所有者这个属性的类型就是人员类,而你的手机的所有者属性所存放的值,就是你这个人员类实例。