使用指南

实战教程 / 按钮开始游戏和场景切换

用 Button、事件绑定、场景名选择和 Director 节点搭建常见的开始游戏流程。

16

几乎所有游戏都从一个「开始」按钮开始:玩家点它,画面切到主场景。这个流程听起来简单,但里面同时藏着四件容易被混在一起看的事——把它们分开处理,你以后遇到类似的 UI 交互都会更顺。

这一节我们就用最直白的方式,把这条流程从头到尾走一遍。

本案例要学会什么

对应能力
工作流什么时候启动生命周期入口
按钮节点在哪里场景节点查找
点击事件怎么进入工作流UI 事件绑定
游戏场景怎么打开Director 场景加载

关键心态:不要一上来就直接切场景。先证明按钮点击已经进到工作流了,再接场景加载。这样如果哪一步坏了,你只需排查最近的一两步——而不是从头到尾找。

场景准备

准备两个场景(用 Cocos 的场景资源):

场景用途
Home首页,包含开始按钮
Game游戏主场景

Home 场景里创建:

  • 一个按钮节点 StartButton(挂 Cocos 的 Button 组件)。
  • 一个空节点 HomePanelLogic——用来挂我们即将写的工作流组件。

为什么按钮和逻辑挂在不同节点上? 因为 StartButton 只负责显示和接收点击,HomePanelLogic 承载流程逻辑。这样以后换按钮皮肤、调 UI 层级都不容易误伤逻辑组件。

创建工作流

新建 HomePanel.sgw,首次打开选「组件」类型。编译之后,把生成的组件挂到 HomePanelLogic

节点搭建:一条清晰的执行链

目标流程:

启动事件
  → 查找 StartButton 节点
  → 获取 Button 组件
  → 绑定按钮点击事件
  → 事件触发后加载 Game 场景

会用到这些节点族:

任务节点族
启动入口事件节点
查找场景节点Cocos 节点
获取 Button 组件UI Button 节点
切换场景Director 节点
打印排查调试节点

第一版:先做看得见的版本

不要一开始就切场景。先在按钮点击回调后接一个「打印字符串」,文本填:

Start button clicked

预览、运行 Home 场景,点击按钮。如果控制台里能看到这行文字——恭喜,前三件事已经全部搞定:入口触发了、按钮找到了、点击进到工作流了。

这一步证明的东西比你想象的多——它把”按钮/查找/事件绑定”这三个变量一次性锁定成”OK”,后面出问题就一定不在这里。

第二版:接入场景切换

回到工作流,把打印节点留着(先不删),在它后面接 Director 的场景加载节点,目标场景选 Game

如果这个节点提供场景选择器,务必用选择器——比手写字符串安全得多,不会因为一个空格或大小写踩坑。

在场景加载之前再补一条打印:

Loading Game scene

这样你就有两个观察点了。运行看现象:

  • 只看到 Start button clicked,看不到第二行 → 按钮进来了,但场景切换没被执行
  • 两行都看到,但画面没切 → 切换节点被执行了,但目标场景加载失败

有了这个二分法,问题范围一下就缩小了——这也是工作流最爽的地方之一。

验收标准

完成后按顺序核对:

  1. 运行 Home 场景没有编译错误。
  2. 启动事件后的临时打印只出现一次(如果多次,检查是不是同一个组件被挂了多份)。
  3. StartButton 能看到 Start button clicked
  4. 继续能看到 Loading Game scene
  5. 画面切到 Game
  6. 连续快速点击不会重复触发多次场景加载。

第 3 步失败 → 重点查按钮、事件绑定、组件获取。第 3 步成功但第 5 步失败 → 重点查场景名、Cocos 构建设置里是否勾选了这个场景、Director 节点。

常见问题速查

现象优先排查
点击无反应按钮事件后面的临时打印是否输出
找不到 Button节点路径是否指向 StartButton,节点上是否真的挂了 Button 组件
场景未切换目标场景是否已加入 Cocos 构建设置
运行时报空值查找节点或获取组件节点的输出是否为空
重复触发是否在多次启用时重复绑定同一个事件

站稳后再进阶

跑通之后,可以试试这些扩展——都是真实项目里常见的加固:

  • 点击后先禁用按钮,避免玩家连点导致重复触发。
  • 切场景前播放按钮音效,让反馈更自然。
  • 切场景前写入全局状态,比如当前关卡编号、玩家角色。
  • 用枚举管理场景名,把 HomeGameResult 收进一个枚举,避免字符串散落各处。

这些看似小事,累积起来会让你的项目在半年后还很好维护。