学习空间/场景切换:离开前后发生了什么
状态与流程 / LESSON 18

场景切换:离开前后发生了什么

资源加载、节点释放、输入锁和重试都要有明确归属。

基础约 5 分钟阅读,实作另计4 节现在学
CONCEPT MAP先看一眼知识之间的联系
先看一眼知识之间的联系01旧场景02检查路径03发起切换04新场景就绪
顺着图中的联系理解本课,再用下面的练习验证。图解是教学模型,不是引擎运行结果。

01一个场景可以装什么

可把独立房间保存成场景,以便单独编辑和验证;但一个场景不等于一个章节,也不等于必须一次只加载一个房间。首个练习直接切到另一张空场景即可。过场动画、异步加载、跨场景保存等以后按需要加入。

02两张空场景的实验

  1. 建立 practice_a.tscn 与 practice_b.tscn,每个放 Label 标明 A 或 B。
  2. 在 A 放 Button,挂下面脚本;把 B 拖入 Target Scene。
  3. 运行 A 并点击按钮,观察切换;停止再运行应回到初始 A。
  4. 清空 Target Scene,确认程序拒绝执行并提供原因。

03检查依赖与返回错误

scene_switch_practice.gd gdscript
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;未标明实机验证的代码,仍需在独立工程中检查。

把这课收进你的理解里。

标记已读不会自动勾选实作,也不代表游戏功能已经完成。

输入一个你想弄明白的问题。

按 Esc 关闭 · 标题、关键词和正文一起搜索