状态与流程 / LESSON 18
场景切换:离开前后发生了什么
资源加载、节点释放、输入锁和重试都要有明确归属。
CONCEPT MAP先看一眼知识之间的联系
01一个场景可以装什么
可把独立房间保存成场景,以便单独编辑和验证;但一个场景不等于一个章节,也不等于必须一次只加载一个房间。首个练习直接切到另一张空场景即可。过场动画、异步加载、跨场景保存等以后按需要加入。
02两张空场景的实验
- 建立 practice_a.tscn 与 practice_b.tscn,每个放 Label 标明 A 或 B。
- 在 A 放 Button,挂下面脚本;把 B 拖入 Target Scene。
- 运行 A 并点击按钮,观察切换;停止再运行应回到初始 A。
- 清空 Target Scene,确认程序拒绝执行并提供原因。
03检查依赖与返回错误
extends Button
@export var target_scene: PackedScene
var switching: bool = false
func _ready() -> void:
pressed.connect(_on_pressed)
func _on_pressed() -> void:
if switching:
return
if target_scene == null:
push_error("未指定练习目标场景")
return
switching = true
disabled = true
var error: Error = get_tree().change_scene_to_packed(target_scene)
if error != OK:
switching = false
disabled = false
push_error("场景切换失败,错误码:%d" % error)04切换不是瞬间搬走整个宇宙
场景切换涉及旧场景移出和新场景加入的时序。请求切换后不要继续假定旧节点仍安全可用,也不要紧接着访问尚未就绪的新场景。跨场景协调时可查 scene_changed 信号与官方时序说明。需要保留的状态应放在明确寿命的对象中,而不是赌旧场景不会释放。
动手后,再勾选
不是“我看懂了”,而是你在独立练习里做出并检查过。
CHECK YOUR UNDERSTANDING
换一个情景,你会怎么判断?
调用场景切换后,立即操作旧场景子节点是否可靠?
旧场景会移出并释放;跨场景代码需要考虑生命周期。
用自己的话,留一条笔记
可以写“我之前以为……,现在发现……”,或者记录还没解决的问题。
仅保存在此浏览器0 / 20000
↗回到资料核对
本课是解释与练习,不替代对应版本的官方手册。网页实验不运行 Godot;未标明实机验证的代码,仍需在独立工程中检查。
把这课收进你的理解里。
标记已读不会自动勾选实作,也不代表游戏功能已经完成。