Skip to content

备忘清单

基础节点

gdscript
# 自定义节点图标
@icon("res://icon.svg")
# 自定义节点类名
class_name MyNode
# 继承节点类型
extends Node
# 信号
signal my_signal(param1, param2)

# 变量成员
var a = 5 # 整数
var s = "Hello" # 字符串
var arr = [1, 2, 3] # 数组
var dict = {"key": "value", 2: 3} # 字典
var other_dict = {key = "value", other_key = 2}  # 另外写法字典
var typed_var: int # 类型标注
var inferred_type := "String" # 类型推断

# 获取节点
@onready var child_node = get_node("child_node")
@onready var child_node2 = $child_node 
# 获取唯一化节点
@onready var unique_child_node = get_node("%child_node") 
@onready var unique_child_node2 = %child_node

# 常量成员 不能修改
const ANSWER = 42
const THE_NAME = "Charly"

# 节点枚举 默认从0开始
enum {UNIT_NEUTRAL, UNIT_ENEMY, UNIT_ALLY}
enum Named {THING_1, THING_2, ANOTHER_THING = -1}
# 枚举类型 从1开始
enum Season { SPRING= 1, SUMMER, AUTUMN, WINTER }

# 内置Vector类型
var v2 = Vector2(1, 2)
var v3 = Vector3(1, 2, 3)

# 函数
func some_function(param1, param2, param3):
	const local_const = 5
	
	# 条件语句
	if param1 < local_const:
		print(param1)
	elif param2 > 5:
		print(param2)
	else:
		print("失败!")

	# 循环语句
	for i in range(20):
		print(i)
	
	# while循环
	while param2 != 0:
		param2 -= 1

	# match语句
	match param3:
		# 匹配到3
		3:
			print("param3值是3!")
		# 匹配到1或2
		1,2:
			print("param3值是1或2!")
		# 匹配到其他
		_:
			print("param3值不是3或2或1!")
	# 赋值变量
	var local_var = param1 + 3
	# 返回值
	return local_var


# 在子类中,可以重载(override)与基类(base)/父类(super)中相同名称的函数。
# 如果你仍然想调用它们,可以使用 "super"来调用相同函数名。
func something(p1, p2):
	# 调用基类/父类的something函数
	super(p1, p2)

# 也可以调用基类/父类中的另一个函数
func other_something(p1, p2):
	# 调用父类的something函数
	super.something(p1, p2)

# 构造函数
func _init():
	# 调用当前类的实例函数
	self.something(1,2)
	# 上下两种写法等价 默认调用优先级: 
	# 内置全局函数(GlobalScope Functions (print 等等)) > 当前实例方法
	# 冷知识: 内置原生的方法无法重载(get_class 等等)
	# 除了内置虚拟方法可以重载 _XXX 
	# 比如:_init _ready _process _physics_process 等等
	# 如果想调用当前实例方法,就使用上面self.的写法 
	something(2,4)

	print("Constructed!")
	# 创建一个新的Something类的实例
	var lv = Something.new()
	# 访问其成员 输出结果为10
	print(lv.a)

# 内部的类
class Something:
	var a = 10

属性

gdscript
extends Node

var _name:String = ""; 
var person_name : String:
    get:
        return _name
    set(value):
        _name = value

var test = ""

var _age:int = 18; 
var person_age : int:
    get:
        return _age

For循环

gdscript
extends Node
var dict = {"key1": "value1", "key2": "value2"}
func _ready() -> void:
    for key in dict:
        print(key)
        print(dict[key])
    var reverse_key =dict.keys()
    reverse_key.reverse()
    for key in reverse_key:
        print(key)
        print(dict[key])
    
    for index in range(get_children().size()):
        print(get_child(index).get_name())
    
    for index in get_children().size():
        print(get_child(index).get_name())

    for child in get_children():
        print(child.get_name())
        child.queue_free()