4. Cocos Creator 核心概念:场景、节点、组件、预制体、资源管理
好,咱们今天聊聊 Cocos Creator 里最核心的几个概念。说实话,很多新手一上来就被这些术语搞懵了。我当年刚接触时也一样,什么场景、节点、组件,感觉像在学哲学。但别担心,这些东西说白了就是搭积木。
4.1 场景(Scene)—— 你的游戏舞台
场景是什么?你可以把它想象成一个舞台。游戏里的每一个画面,比如主菜单、关卡1、结算界面,都是一个独立的场景。
我个人习惯把场景当作「容器」。它本身不干任何事,就是装东西的。你往里面放角色、放背景、放UI,它就变成了一个完整的游戏画面。
核心要点:一个游戏至少有一个场景。场景切换时,旧场景里的东西会被销毁,新场景的东西会被加载。
我在项目中遇到过一个问题:有人把所有东西都塞进一个场景里,结果游戏越做越卡。为什么?因为场景里东西太多,加载慢,内存也扛不住。正确的做法是:按功能拆分场景。比如「加载场景」只放一个进度条,「战斗场景」只放战斗相关的元素。
4.2 节点(Node)—— 最小的积木块
节点是场景里的基本单位。说白了,场景里能看到的一切,都是节点。一个角色是一个节点,一个按钮是一个节点,甚至一个空物体也是一个节点。
节点最重要的特性是:它可以有父子关系。你想想看,一个角色手里拿把剑,剑跟着手移动。怎么实现?把剑节点挂到手节点下面就行了。父节点移动,子节点跟着动。
我的小技巧:用空节点做「容器」。比如一个角色身上有多个部件,我会先建一个空节点当根,再把所有部件挂上去。这样移动、旋转、缩放都方便。
嗯,这里要注意:节点本身没有「行为」。它只是一个位置、一个旋转、一个缩放。想让节点动起来?那就需要组件了。
4.3 组件(Component)—— 给节点注入灵魂
组件是 Cocos Creator 最巧妙的设计。节点是身体,组件就是灵魂。一个节点可以挂多个组件,每个组件赋予它一种能力。
比如:
- 挂上
Sprite组件,节点就能显示图片 - 挂上
Label组件,节点就能显示文字 - 挂上
RigidBody组件,节点就有了物理属性 - 挂上你自己写的脚本组件,节点就有了自定义行为
我曾经犯过一个错:把所有的逻辑都写在一个脚本里,结果那个脚本越来越长,最后我自己都看不懂了。后来我学乖了,一个组件只干一件事。移动的组件只管移动,攻击的组件只管攻击。这样调试起来特别爽。
避坑指南:我曾经把一个脚本组件挂到100个节点上,结果每个节点都执行了同样的逻辑,性能直接崩了。记住:组件是共享的,但每个节点上的组件实例是独立的。如果逻辑需要区分节点,记得用 this.node 获取当前节点。
4.4 预制体(Prefab)—— 可复用的模板
预制体是什么?说白了就是「保存好的节点模板」。你做好了一个敌人角色,把它拖成预制体。以后想生成敌人,直接复制这个预制体就行。
我刚开始做游戏时,每次生成敌人都是手动复制粘贴节点。后来发现,改一个敌人的属性,所有复制出来的都要手动改一遍,累死个人。预制体解决了这个问题:你改预制体本身,所有实例都会同步更新。
使用预制体的典型场景:
- 子弹、敌人、道具等需要大量生成的物体
- UI 中的按钮、列表项等重复元素
- 需要动态加载和销毁的对象
核心用法:
// 加载预制体
cc.resources.load('prefabs/Enemy', cc.Prefab, function (err, prefab) {
// 实例化
let enemy = cc.instantiate(prefab);
// 添加到场景
this.node.addChild(enemy);
});
你想想看,如果不用预制体,你得手动创建节点、挂组件、设置属性。用预制体,一行代码搞定。这就是效率。
4.5 资源管理 —— 游戏的血肉
资源包括图片、音频、字体、动画等。没有资源的游戏,就像没有食材的厨房。Cocos Creator 的资源管理有几个关键点:
| 资源类型 | 常见格式 | 加载方式 |
|---|---|---|
| 图片 | png, jpg | 直接拖入或动态加载 |
| 音频 | mp3, ogg | cc.loader.loadRes |
| 字体 | ttf | 拖入或动态加载 |
| 动画 | .anim | 挂载 Animation 组件 |
我个人习惯把资源按类型分文件夹:images、audio、fonts。这样找起来方便。另外,不要把所有资源都放在一个文件夹里,否则加载时会把整个文件夹都打包进去,浪费内存。
资源加载的黄金法则:按需加载。进入关卡前只加载关卡需要的资源,不要提前加载后面才用到的。抖音小游戏有包体限制,资源管理不好,包体超了,游戏就发不出去。
嗯,这里还要提一下「资源释放」。很多新手只加载不释放,结果内存越占越多。我建议在场景切换时,手动释放不再使用的资源:
// 释放单个资源
cc.loader.release(resUrl);
// 释放整个场景的资源
cc.loader.releaseRes('scene/Level1');
4.6 它们之间的关系
说了这么多,咱们捋一捋:
- 场景是最大的容器,装着一堆节点
- 节点是基本单位,有父子关系
- 组件挂在节点上,赋予节点行为
- 预制体是保存好的节点模板,方便复用
- 资源是素材,被组件引用和使用
说白了,整个 Cocos Creator 就是围绕这五个概念转的。你把这五个概念搞明白了,后面学什么都是水到渠成的事。
一句话总结:场景是舞台,节点是演员,组件是演技,预制体是替身,资源是道具。记住这个比喻,你就入门了。
好,这一章就到这儿。下一章咱们聊聊「脚本开发」,到时候我会教你怎么用代码控制这些节点和组件。那才是真正让游戏活起来的关键。