cocos-creator-2x-cn
Cocos Creator 2.4 开发规范
⚠️ Cocos Creator 2.4(TypeScript 3.x / JavaScript ES6+):所有模式和示例均兼容 Cocos Creator 2.4.x 版本。
官方文档:https://docs.cocos.com/creator/2.4/manual/zh/ API 参考:https://docs.cocos.com/creator/2.4/api/zh/
技能用途
此技能为 Cocos Creator 2.4 项目提供全面的开发规范指导,代码质量优先:
优先级 1:代码质量与规范(最重要)
- TypeScript 严格模式、访问修饰符(public/private/protected)
- 抛出异常(绝不静默错误)
- console.log 仅用于开发,生产构建中移除
- 不可变字段使用 readonly,常量使用 const
- 正确的错误处理和类型安全
优先级 2:Cocos Creator 2.4 架构
- cc.Class / cc._decorator 组件声明方式
- 生命周期:onLoad → onEnable → start → update → lateUpdate → onDisable → onDestroy
- 事件系统:cc.Node 事件、cc.Event.EventCustom、cc.systemEvent
- Asset Manager(cc.assetManager / cc.resources)资源管理
- cc.tween 缓动系统 + cc.Action 动作系统
- 对象池(cc.NodePool)、计时器(schedule)
优先级 3:可试玩广告性能
- DrawCall 合批(自动图集、BMFont)
- update() 循环中零内存分配
- 预加载与资源释放策略
- 包体大小 <5MB(纹理压缩、代码压缩)
触发条件
- 编写或重构 Cocos Creator 2.x TypeScript/JavaScript 代码
- 使用 cc.Class、cc._decorator、cc.Component 等 2.x API
- 处理节点(cc.Node)、组件、场景管理
- 实现事件监听与分发(on/off/emit/dispatchEvent)
- 使用 cc.resources.load、cc.assetManager 加载资源
- 使用 cc.tween 或 cc.Action 创建动画
- 使用对象池(cc.NodePool)优化性能
- 为可试玩广告优化包体和性能
- 审查 Cocos Creator 2.x 代码变更
快速参考指南
你需要什么帮助?
| 优先级 | 任务 | 参考文档 |
|---|---|---|
| 🔴 优先级 1:代码质量 | ||
| 1 | TypeScript 严格模式、访问修饰符 | 质量与规范 ⭐ |
| 1 | 错误处理、异常抛出 | 质量与规范 ⭐ |
| 🟢 优先级 2:Cocos 架构 | ||
| 2 | 组件系统、cc.Class、cc._decorator | 组件系统 |
| 2 | 生命周期方法 | 组件系统 |
| 2 | 事件系统、EventDispatcher | 事件模式 |
| 2 | Asset Manager、资源加载与释放 | 资源管理 |
| 2 | cc.tween 缓动、cc.Action 动作 | 组件系统 |
| 🔵 优先级 3:性能与审查 | ||
| 3 | DrawCall 合批、性能优化 | 可试玩广告优化 |
| 3 | Update 循环优化、零内存分配 | 性能优化 |
| 3 | 包体大小缩减 | 可试玩广告优化 |
| 3 | 架构审查 | 架构审查 |
| 3 | 质量审查 | 质量审查 |
⚠️ Cocos Creator 2.4 vs 3.x 关键区别
| 特性 | 2.4 (本技能) | 3.x |
|---|---|---|
| 类声明 | cc.Class({}) 或 cc._decorator |
_decorator from 'cc' |
| 导入方式 | const {ccclass, property} = cc._decorator |
import { _decorator } from 'cc' |
| 节点类型 | cc.Node |
Node |
| 组件基类 | cc.Component |
Component |
| 资源加载 | cc.resources.load() |
resources.load() |
| 缓动系统 | cc.tween() |
tween() |
| 向量 | cc.v2() / cc.v3() |
new Vec2() / new Vec3() |
| 调试宏 | CC_DEBUG |
DEBUG |
🔴 TypeScript 组件模式(推荐)
const { ccclass, property } = cc._decorator;
@ccclass
export default class PlayerController extends cc.Component {
@property(cc.Node)
public targetNode: cc.Node = null;
@property
public moveSpeed: number = 100;
private currentHealth: number = 100;
private static readonly MAX_HEALTH: number = 100;
protected onLoad(): void {
if (!this.targetNode) {
throw new Error("PlayerController: targetNode 未赋值");
}
this.node.on(cc.Node.EventType.TOUCH_START, this.onTouchStart, this);
}
protected start(): void {
// 所有组件 onLoad 完成后,安全引用其他组件
}
protected onDestroy(): void {
this.node.off(cc.Node.EventType.TOUCH_START, this.onTouchStart, this);
}
private onTouchStart(event: cc.Event.EventTouch): void {
if (CC_DEBUG) {
console.log("检测到触摸");
}
this.takeDamage(10);
}
private takeDamage(amount: number): void {
this.currentHealth = Math.max(0, this.currentHealth - amount);
if (this.currentHealth <= 0) {
this.handlePlayerDeath();
}
}
private handlePlayerDeath(): void {
// 死亡逻辑
}
}
🟢 JavaScript cc.Class 模式
cc.Class({
extends: cc.Component,
properties: {
targetNode: { default: null, type: cc.Node },
moveSpeed: 100,
playerName: { default: "Player", type: cc.String },
},
onLoad() {
if (!this.targetNode) {
cc.error("GameCtrl: targetNode 是必需的");
return;
}
this.node.on(cc.Node.EventType.TOUCH_START, this.onTouchStart, this);
},
onDestroy() {
this.node.off(cc.Node.EventType.TOUCH_START, this.onTouchStart, this);
},
onTouchStart(event) {
cc.log("Touch detected at:", event.getLocation());
},
});
🟢 事件系统模式
// 自定义事件 - 使用 cc.EventTarget
const GameEvent = {
SCORE_CHANGED: "score_changed",
LEVEL_COMPLETE: "level_complete",
PLAYER_DIED: "player_died",
};
// 全局事件管理器
const eventBus = new cc.EventTarget();
// 注册事件(在 onEnable 中)
eventBus.on(GameEvent.SCORE_CHANGED, this.onScoreChanged, this);
// 注销事件(在 onDisable 中)
eventBus.off(GameEvent.SCORE_CHANGED, this.onScoreChanged, this);
// 发射事件
eventBus.emit(GameEvent.SCORE_CHANGED, { oldScore: 0, newScore: 100 });
// 节点事件冒泡 - 使用 cc.Event.EventCustom
this.node.dispatchEvent(new cc.Event.EventCustom("my-event", true));
🟢 资源加载模式
// cc.resources.load(v2.4+ 推荐)
cc.resources.load("prefabs/enemy", cc.Prefab, (err, prefab) => {
if (err) { cc.error(err); return; }
const node = cc.instantiate(prefab);
this.node.addChild(node);
});
// 加载 SpriteFrame
cc.resources.load("textures/hero", cc.SpriteFrame, (err, spriteFrame) => {
if (err) { cc.error(err); return; }
this.getComponent(cc.Sprite).spriteFrame = spriteFrame;
});
// 场景加载
cc.director.loadScene("GameScene");
// 预加载
cc.director.preloadScene("GameScene", () => {
cc.log("场景预加载完成");
});
🟢 cc.tween 缓动模式
// cc.tween 链式调用
cc.tween(this.node)
.to(1, { position: cc.v3(100, 200, 0) })
.to(0.5, { scale: 2 })
.call(() => { cc.log("动画完成"); })
.start();
// 序列动画
cc.tween(this.node)
.to(0.3, { opacity: 0 })
.to(0.3, { opacity: 255 })
.union()
.repeatForever()
.start();
// 停止缓动
cc.Tween.stopAllByTarget(this.node);
代码审查清单
快速验证
🔴 代码质量:
- TypeScript 严格模式已启用
- 所有成员有访问修饰符
- 错误时抛出异常或 cc.error
- console.log 已包装在 CC_DEBUG 中
- 无
any类型
🟢 Cocos 架构:
- 组件生命周期顺序正确
- 事件监听在 onEnable/onLoad 中注册
- 事件监听在 onDisable/onDestroy 中注销
- 资源在不需要时正确释放
- cc.tween 在节点销毁前停止
- @property / properties 声明正确
🔵 性能:
- update() 中无内存分配
- 使用自动图集减少 DrawCall
- 对象池用于频繁创建/销毁
- 纹理压缩已启用
详细参考
框架
- 组件系统 - cc.Class/cc._decorator、生命周期、@property、缓动/动作
- 事件模式 - 节点事件、自定义事件、键盘事件、触摸事件
- 资源管理 - cc.resources、cc.assetManager、Asset Bundle、资源释放
- 可试玩广告优化 - DrawCall、对象池、包体优化
语言
审查
关键词
cocos creator, cocos creator 2.4, cocos 2.x, cc.Class, cc.Component, cc.Node, cc._decorator, ccclass, property, 生命周期, onLoad, start, update, onDestroy, cc.resources, cc.assetManager, cc.tween, cc.Action, cc.NodePool, cc.EventTarget, 可试玩广告, playable ad, 游戏开发, 组件系统, 事件系统, 资源管理, 对象池, 缓动系统
More from zpqq132555/skills
cocos-creator-3x-cn
提供 Cocos Creator 3.8 游戏引擎的全面开发指导,包括组件系统(_decorator、Component)、生命周期回调、事件系统(EventTarget、input)、resources 资源管理、tween 缓动系统、对象池、UI 系统、物理碰撞以及可试玩广告优化。在用户编写或重构 Cocos Creator 3.x TypeScript 代码、实现游戏功能、处理资源加载与释放、优化性能/包体大小、审查代码变更、搭建可试玩广告项目架构时触发。也适用于用户提到 import from 'cc'、Component、Node、resources、tween、director 等 3.x API 时使用。
200skill-creator-cn
创建新技能、修改和改进现有技能、衡量技能性能。当用户希望从零开始创建技能、更新或优化现有技能、运行评估测试技能、通过方差分析进行性能基准测试、或优化技能描述以提升触发准确性时使用此技能。
9find-skills-cn
帮助用户在提出诸如“如何做 X”、“寻找处理 X 的技能”、“是否有能够……的技能”之类的问题,或者表达出想要扩展功能的意愿时,发现并安装相应的代理技能。当用户正在寻找可能以可安装技能形式存在的功能时,应使用此技能。
4layaair-3x-cn
提供 LayaAir 3.x 游戏引擎的全面开发指导,包括 ECS 组件系统(@regClass/@property 装饰器、Script 生命周期)、事件系统(EventDispatcher、鼠标/键盘/物理事件)、Promise 异步资源加载(Laya.loader.load)、全新 Tween 缓动系统(chain/parallel)、Timer 定时器、对象池(Laya.Pool)、2D/3D 显示对象、UI 组件系统、场景管理(Scene.open/close)、2D/3D 物理系统、屏幕适配及性能优化。当用户编写或重构 LayaAir 3.x TypeScript 代码、实现脚本组件、处理事件监听、资源加载、缓动动画、性能优化及可试玩广告项目时触发。也适用于提到 @regClass、@property、Laya.Script、Laya.loader.load(Promise)、Laya.Tween.create、Laya.Scene.open、Laya.Pool、Sprite3D、Camera 等 LayaAir 3.x API 时使用。即使用户只是提到 LayaAir、Laya 引擎或 .ls 场景文件也应触发此技能。
3layaair-2x-cn
提供 LayaAir 2.0 游戏引擎的全面开发指导,包括脚本组件系统(Script/Component 生命周期)、EventDispatcher 事件系统、Laya.loader 资源加载、Tween 缓动、Timer 定时器、显示对象(Sprite/Text/Image)、UI 系统以及可试玩广告优化。当用户编写或重构 LayaAir 2.0 TypeScript 代码、实现脚本组件、处理事件监听、资源加载、缓动动画、性能优化及可试玩广告项目时触发。也适用于提到 Laya.init、Laya.stage、Laya.loader、Laya.Tween、laya.display.Sprite、laya.utils.Handler、laya.events.EventDispatcher 等 LayaAir 2.x API 时使用。
2layaair-1x-cn
提供 LayaAir 1.0 游戏引擎的全面开发指导,包括 Sprite 显示对象、EventDispatcher 事件系统、Laya.loader 资源加载、Tween 缓动、Timer 定时器、文本与 UI 系统及性能优化。当用户编写或重构 LayaAir 1.0 TypeScript 代码、实现事件监听、资源加载、缓动动画或优化可试玩广告时触发。也适用于提到 Laya.init、Laya.stage、Laya.loader、Laya.Tween、laya.display.Sprite、laya.utils.Handler、laya.events.EventDispatcher 等 LayaAir 1.x API 时使用。
2