GDScript 语法

GDScript 语法

GDScript 是 Godot 的官方脚本语言,语法类似 Python。

基本语法

变量声明

var name = "Player"        # 类型推断
var health: int = 100     # 显式类型
var speed: float = 5.0    # 浮点数
var is_active: bool = true

常量

const MAX_SPEED = 10.0
const GRAVITY = 9.8

数据类型

基础类型

var integer: int = 42
var floating: float = 3.14
var text: String = "Hello"
var boolean: bool = true

数组

var numbers = [1, 2, 3, 4, 5]
var names: Array[String] = ["Alice", "Bob"]  # 类型化数组

字典

var player_data = {
    "name": "Hero",
    "level": 5,
    "exp": 100
}

控制流

条件语句

if health > 0:
    print("Alive")
elif health == 0:
    print("Dead")
else:
    print("Invalid health")

循环

# for 循环
for i in range(10):
    print(i)

for item in array:
    print(item)

# while 循环
while health > 0:
    take_damage()

函数

# 简单函数
func greet(name: String) -> void:
    print("Hello, " + name)

# 带返回值的函数
func calculate_damage(base: int, multiplier: float) -> int:
    return int(base * multiplier)

# 可选参数
func spawn_enemy(count: int = 1) -> void:
    for i in range(count):
        create_enemy()

类与继承

extends CharacterBody2D  # 继承

class_name Player  # 定义类名,可用于类型提示

# 类变量
var speed: float = 200.0
var health: int = 100

# 虚函数重写
func _ready() -> void:
    print("Player is ready!")

func _process(delta: float) -> void:
    movement()

信号

# 定义信号
signal health_changed(new_health: int)
signal died

# 发射信号
signal health_changed.emit(health)
signal died.emit()

# 连接信号
ready():
    health_changed.connect(_on_health_changed)

func _on_health_changed(new_health: int) -> void:
    print("Health is now: ", new_health)

注解

@export var speed: float = 5.0  # 在编辑器中可编辑
@onready var enemy = get_node("Enemy")  # 等待节点 ready

向量运算

var position := Vector2(0, 0)
var direction := Vector2(1, 0)

position += direction * speed * delta
var distance := position.distance_to(target)
var angle := position.angle_to(target)

类型转换

var text = "123"
var number = int(text)  # 字符串转整数
var float_num = float(text)

常用内置函数

# 数学函数
abs(x), sqrt(x), pow(base, exponent)
sin(x), cos(x), tan(x)
min(a, b), max(a, b)
clamp(value, min, max)

# 类型检查
is_instance_of(node, Node)
typeof(value)