类成员
阅读过程中请斟酌
类
与实例
这两个词,理解它们的区别。
属性
属性定义于类,独立存在于每个实例中,是用来描述实例的,例如 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 实例,他有两个属性:x
和 y
,如果我们想让输入框向右下方移动一点,则可以:
$LineEdit.position.x += 100
$LineEdit.position.y += 100
[!tip]
向下移动是增加 y 值,因为 Godot 中的 2D 坐标系正方向是向下的,且原点在屏幕左上角。
[!note] 三次元例子
手机的所有者,这是个什么类型的数据?
在完整的面向对象程序中,应该还有一个人员类,那么很明显,手机所有者这个属性的类型就是人员类,而你的手机的所有者属性所存放的值,就是你这个人员类实例。