384人加入学习
(0人评价)
GDScript初学者入门教程-基于Godot和AI教学

使用Godot4.6.2 制作完成于2026.5.13

价格 免费

## 第 3 节附加:变量作用域(新手只要懂这两种)
##
## "作用域" = 一个变量"在哪一段代码里能用"。
## 新手只需要分清两种就够了:
##   1. 脚本级变量(成员变量):整个脚本都能用
##   2. 函数局部变量:只在它所在的那个函数里能用
##
## 把脚本挂到任意 Node 上,F6 运行,对照控制台输出和注释看。

extends Node


# =========================================================
# 这里是"脚本级变量"区域
# ---------------------------------------------------------
# 写在所有函数外面(注意没有缩进),整个脚本里的任何函数都能读和改它。
# 通常用来存"这个角色一直要用到的数据",比如血量、金币、等级。
# =========================================================
var player_hp: int = 100
var gold: int = 0


func _ready() -> void:
    demo_script_level()
    demo_local_variable()
    demo_function_cant_see_local()
    demo_parameter_is_local()
    demo_shadow()


# =========================================================
# 演示 1:脚本级变量在任何函数里都能访问
# =========================================================
func demo_script_level() -> void:
    print("--- 1. 脚本级变量 ---")
    print("初始血量:", player_hp)   # 能读
    player_hp -= 20                   # 能改
    print("受伤后血量:", player_hp)
    add_gold()                        # 调用另一个函数也能改 gold
    print("拾取金币后:gold = ", gold)


# 另一个函数:照样能看到 gold,因为 gold 是脚本级的
func add_gold() -> void:
    gold += 50


# =========================================================
# 演示 2:函数里声明的变量 = 局部变量
# ---------------------------------------------------------
# 写在函数缩进里的 var,只在这个函数内部能用。
# 函数一旦执行完,这个变量就"消失"了。
# 不同的函数可以在内部起相同的变量名称,互不影响,相当于1班有个小明,2班也有个小明,是两个不同的人,分属不同的班级,但是同一个函数内不能起两个相同名字的变量

#=========================================================
func demo_local_variable() -> void:
    print("\n--- 2. 局部变量 ---")
    var damage: int = 30              # ← 局部变量,只在本函数里有效
    var crit: bool = true             # ← 同上
    print("本次伤害:", damage, "  暴击:", crit)
    # 函数结束后,damage 和 crit 就不存在了


# =========================================================
# 演示 3:别的函数看不到这里的局部变量
# ---------------------------------------------------------
# 这是新手最常踩的坑:以为在 A 函数里定义的变量,B 函数也能直接用。
# =========================================================
func demo_function_cant_see_local() -> void:
    print("\n--- 3. 局部变量出不了函数 ---")
    var secret: String = "我只在这个函数里存在"
    print("本函数内可以读:", secret)
    
    try_read_secret()
    # 如果你在 try_read_secret 里写 print(secret),会直接报错。


func try_read_secret() -> void:
    # 这里看不到 demo_function_cant_see_local 里的 secret
    # 下面这行如果取消注释,编辑器会立刻飘红:
    # print(secret)   # ❌ Identifier "secret" not declared
    print("另一个函数读不到上面的 secret")


# =========================================================
# 演示 4:函数的"参数"本质上也是局部变量
# ---------------------------------------------------------
# 参数和函数体里 var 出来的变量一样,只在本函数内有效。
# =========================================================
func demo_parameter_is_local() -> void:
    print("\n--- 4. 参数也是局部变量 ---")
    greet("小明")
    greet("小红")
    # 这里看不到上面 greet 函数里的 name 参数


func greet(name: String) -> void:
    # name 在 greet 内部有效,函数一结束就消失
    print("你好,", name)


# =========================================================
# 演示 5:同名时谁优先?("局部变量遮住脚本级变量")
# ---------------------------------------------------------
# 如果脚本级和局部变量起了相同的名字,函数里用到的会是"局部那个"。
# 新手建议:别故意起重名,纯粹找麻烦。
# =========================================================
func demo_shadow() -> void:
    print("\n--- 5. 同名时局部优先(建议避免)---")
    print("脚本级 player_hp 现在是:", player_hp)

    var player_hp: int = 9999         # 同名的局部变量
    print("函数里再声明同名的 player_hp = ", player_hp)
    print("这里用到的是【局部那个】,脚本级的没被改")

    # 函数结束后,下面那个 player_hp 消失,脚本级的还在
 

[展开全文]

授课教师

问问题加入A计划,有专门负责答疑的老师哦!!!

课程特色

下载资料(1)
视频(35)