开发习惯规范
1. Button 事件监听
开发时如果遇到 XQButton 或 cc.Button 类型,添加点击监听事件时统一使用以下写法:
1 | this.btn.node.on("click", this.onClick, this); |
约束
- 统一使用
on("click", handler, this)形式绑定。 - 第三个参数必须传
this,保证回调上下文正确。 - 禁止省略上下文参数或改为匿名函数包装。
2. @property 节点空值检查
对于使用 @property 装饰器声明的属性(通常是编辑器绑定的节点或组件),在代码中使用时不要添加空值判断。
规范
错误写法:
1
2
3
4
5
6
7
8(cc.Node)
myNode: cc.Node = null;
start() {
if (this.myNode) { // ❌ 禁止这种防御性编程
this.myNode.active = true;
}
}正确写法:
1
2
3start() {
this.myNode.active = true; // ✅ 直接调用,如果为空直接报错
}
原因
- 这些属性预期必须在编辑器中挂载。
- 如果运行时为空,直接抛出异常(NullPointerException)能第一时间暴露“忘记挂载节点”的问题。
- 添加空值判断会掩盖配置错误,导致功能静默失效,增加排查难度。
3. 多语言调用方法
需要使用多语言文案时,统一通过以下方式获取:
1 | GlobalObjectMgr.instance.localizedTextHelper.getLocalString(""); |
约束
- 统一使用
GlobalObjectMgr.instance.localizedTextHelper.getLocalString(key)。
4. 动画实现方式
需要实现动画效果时,统一使用 cc.tween 方法。
1 | cc.tween(node).to(0.3, { scale: 1.1 }).start(); |
如有异步串行动画需求,统一使用:
1 | await asyncMgr.tween(cc.tween(node).to(0.3, { scale: 1.1 })); |
约束
- 普通动画统一使用
cc.tween(...).start()。 - 异步场景统一使用
asyncMgr.tween(cc.tween(...)),异步方法调用不需要调用start()。
5. 弹窗节点复用规范
继承 WindowBase 或 UIBase 的脚本属于弹窗界面。
生命周期说明
- 节点一般情况下不会销毁。
- 每次打开弹窗都会调用
refreshUI。
开发约束
- 节点尽量避免“销毁后再创建”的实现方式。
- 如果存在动态创建节点并维护数组的场景,不要在每次
refreshUI时清空并重建。 - 首次创建后应缓存到数组中,后续
refreshUI直接复用数组内节点,仅更新显示状态和内容。 - 仅在确实需要时补充新增节点,已有节点优先复用。