HOME / 第 2 部分 · 核心概念与 GDScript 语法 / 第 15 课
MODULE 2 · 核心概念与 GDScript 语法

第 15 课 · 函数与作用域

⏱ 预计时长 30 分钟📊 难度 入门📚 模块 第 2 部分 · 核心概念与 GDScript 语法

🎯 本课学习目标

函数把「一段功能」打包复用。本课系统掌握函数的定义、调用与作用域。

📖 详细教学步骤

定义与调用函数语法

func 定义函数:

GDSCRIPTextends Node2D

func _ready():
    say_hello()          # 调用函数
    say_hello()          # 可以重复调用

func say_hello():
    print("你好,我是函数!")

参数:让函数接受输入语法

函数可以接收参数,让同一段逻辑处理不同数据:

GDSCRIPTfunc _ready():
    attack(10)      # 参数为 10
    attack(25)      # 参数为 25
    heal(20, "玩家")

func attack(damage: int):
    print("造成 ", damage, " 点伤害")

func heal(amount: int, who: String):
    print(who, " 恢复 ", amount, " 生命")

返回值:函数给出结果语法

return 返回结果,调用处可以接收:

GDSCRIPTfunc _ready():
    var total = add(3, 4)   # total = 7
    print(total)
    var double = multiply_by_two(total)  # 14
    print(double)

func add(a: int, b: int) -> int:
    return a + b

func multiply_by_two(n: int) -> int:
    return n * 2

默认参数语法

参数可以给默认值,调用时可省略:

GDSCRIPTfunc _ready():
    greet("小明")            # 用默认问候
    greet("小红", "晚上好")  # 自定义问候

func greet(name: String, msg: String = "你好"):
    print(msg, ",", name)

作用域:变量可见范围重点

变量有「可见范围」,区分清楚很重要:

GDSCRIPTvar hp = 100   # 脚本级变量:整个脚本都能用(成员变量)

func _ready():
    var temp = 5   # 局部变量:只在 _ready 里能用
    print(hp, temp)   # ✅ 都可以

func other():
    print(hp)        # ✅ 成员变量可用
    # print(temp)    # ❌ 报错!temp 是 _ready 的局部变量
    var temp = 9     # ✅ 可以重新声明同名的局部变量

函数的组织习惯规范

  • 每个函数只做一件事(职责单一)
  • 函数名用动词开头:move()、attack()、take_damage()
  • 重复的代码抽成函数,避免复制粘贴
  • 适当写注释说明函数用途
⚠️
调用函数时参数个数不匹配报错?

调用时传入的参数个数必须与定义一致(有默认参数的除外)。检查函数定义和调用处。

⚠️
函数里访问不到外面的局部变量?

这是作用域问题。局部变量只在它所在的函数内有效,需要跨函数共享的数据用成员变量(脚本顶部 var 声明)。

🧪 动手试一试

🏋️ 课后练习

定义一个计算圆面积的函数 area_of_circle(radius),返回面积;再定义一个攻击函数,根据传入的伤害值扣血并返回是否死亡。

func area_of_circle(r: float) -> float: return 3.14159 * r * r

💡

返回值用 -> 类型 标注,会让错误提前暴露。

💡

把常用逻辑写成函数,你的代码会越来越整洁、可复用。

🎓 本课小结

函数用 func 定义,支持参数、返回值、默认参数;成员变量全脚本可见,局部变量只在函数内可见;一个函数只做一件事。