使用指南
实战教程 / 按钮开始游戏和场景切换
用 Button、事件绑定、场景名选择和 Director 节点搭建常见的开始游戏流程。
几乎所有游戏都从一个「开始」按钮开始:玩家点它,画面切到主场景。这个流程听起来简单,但里面同时藏着四件容易被混在一起看的事——把它们分开处理,你以后遇到类似的 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,看不到第二行 → 按钮进来了,但场景切换没被执行。 - 两行都看到,但画面没切 → 切换节点被执行了,但目标场景加载失败。
有了这个二分法,问题范围一下就缩小了——这也是工作流最爽的地方之一。
验收标准
完成后按顺序核对:
- 运行
Home场景没有编译错误。 - 启动事件后的临时打印只出现一次(如果多次,检查是不是同一个组件被挂了多份)。
- 点
StartButton能看到Start button clicked。 - 继续能看到
Loading Game scene。 - 画面切到
Game。 - 连续快速点击不会重复触发多次场景加载。
第 3 步失败 → 重点查按钮、事件绑定、组件获取。第 3 步成功但第 5 步失败 → 重点查场景名、Cocos 构建设置里是否勾选了这个场景、Director 节点。
常见问题速查
| 现象 | 优先排查 |
|---|---|
| 点击无反应 | 按钮事件后面的临时打印是否输出 |
| 找不到 Button | 节点路径是否指向 StartButton,节点上是否真的挂了 Button 组件 |
| 场景未切换 | 目标场景是否已加入 Cocos 构建设置 |
| 运行时报空值 | 查找节点或获取组件节点的输出是否为空 |
| 重复触发 | 是否在多次启用时重复绑定同一个事件 |
站稳后再进阶
跑通之后,可以试试这些扩展——都是真实项目里常见的加固:
- 点击后先禁用按钮,避免玩家连点导致重复触发。
- 切场景前播放按钮音效,让反馈更自然。
- 切场景前写入全局状态,比如当前关卡编号、玩家角色。
- 用枚举管理场景名,把
Home、Game、Result收进一个枚举,避免字符串散落各处。
这些看似小事,累积起来会让你的项目在半年后还很好维护。