@mclawnet/agent 0.6.20 → 0.6.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/cli.js +63 -0
  2. package/dist/__tests__/checkpoint.test.d.ts +2 -0
  3. package/dist/__tests__/checkpoint.test.d.ts.map +1 -0
  4. package/dist/__tests__/fs-handler-decode.test.d.ts +2 -0
  5. package/dist/__tests__/fs-handler-decode.test.d.ts.map +1 -0
  6. package/dist/__tests__/idle-sweeper.test.d.ts +2 -0
  7. package/dist/__tests__/idle-sweeper.test.d.ts.map +1 -0
  8. package/dist/__tests__/mcp-config.test.d.ts +2 -0
  9. package/dist/__tests__/mcp-config.test.d.ts.map +1 -0
  10. package/dist/__tests__/schedule-runtime-spawn.test.d.ts +2 -0
  11. package/dist/__tests__/schedule-runtime-spawn.test.d.ts.map +1 -0
  12. package/dist/__tests__/schedule-runtime.test.d.ts +2 -0
  13. package/dist/__tests__/schedule-runtime.test.d.ts.map +1 -0
  14. package/dist/__tests__/session-limit.test.d.ts +2 -0
  15. package/dist/__tests__/session-limit.test.d.ts.map +1 -0
  16. package/dist/__tests__/swarm-cli-client.test.d.ts +2 -0
  17. package/dist/__tests__/swarm-cli-client.test.d.ts.map +1 -0
  18. package/dist/__tests__/swarm-control-dispatch.test.d.ts +2 -0
  19. package/dist/__tests__/swarm-control-dispatch.test.d.ts.map +1 -0
  20. package/dist/__tests__/swarm-session-bridge.test.d.ts +2 -0
  21. package/dist/__tests__/swarm-session-bridge.test.d.ts.map +1 -0
  22. package/dist/backend-adapter.d.ts +43 -0
  23. package/dist/backend-adapter.d.ts.map +1 -1
  24. package/dist/checkpoint.d.ts +67 -0
  25. package/dist/checkpoint.d.ts.map +1 -0
  26. package/dist/{chunk-RIK7IXSW.js → chunk-WJWCYGLQ.js} +1130 -147
  27. package/dist/chunk-WJWCYGLQ.js.map +1 -0
  28. package/dist/errors.d.ts +40 -0
  29. package/dist/errors.d.ts.map +1 -0
  30. package/dist/fs-handler.d.ts.map +1 -1
  31. package/dist/hub-connection.d.ts +13 -0
  32. package/dist/hub-connection.d.ts.map +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/schedule-runtime.d.ts +125 -0
  35. package/dist/schedule-runtime.d.ts.map +1 -0
  36. package/dist/session-manager.d.ts +102 -0
  37. package/dist/session-manager.d.ts.map +1 -1
  38. package/dist/skill-loader.d.ts +20 -0
  39. package/dist/skill-loader.d.ts.map +1 -1
  40. package/dist/start.d.ts +2 -0
  41. package/dist/start.d.ts.map +1 -1
  42. package/dist/start.js +1 -1
  43. package/dist/swarm-cli-client.d.ts +24 -0
  44. package/dist/swarm-cli-client.d.ts.map +1 -0
  45. package/dist/swarm-cli-client.js +83 -0
  46. package/dist/swarm-cli-client.js.map +1 -0
  47. package/dist/swarm-control-dispatch.d.ts +47 -0
  48. package/dist/swarm-control-dispatch.d.ts.map +1 -0
  49. package/dist/swarm-session-bridge.d.ts +22 -0
  50. package/dist/swarm-session-bridge.d.ts.map +1 -0
  51. package/package.json +6 -4
  52. package/skills/cocos-creator-3x-cn/SKILL.md +475 -0
  53. package/skills/cocos-creator-3x-cn/references/framework/asset-management.md +322 -0
  54. package/skills/cocos-creator-3x-cn/references/framework/component-system.md +348 -0
  55. package/skills/cocos-creator-3x-cn/references/framework/event-patterns.md +410 -0
  56. package/skills/cocos-creator-3x-cn/references/framework/playable-optimization.md +257 -0
  57. package/skills/cocos-creator-3x-cn/references/language/performance.md +363 -0
  58. package/skills/cocos-creator-3x-cn/references/language/quality-hygiene.md +307 -0
  59. package/skills/cocos-creator-3x-cn/references/review/architecture-review.md +183 -0
  60. package/skills/cocos-creator-3x-cn/references/review/quality-review.md +251 -0
  61. package/skills/cocos-performance-optimizer/SKILL.md +214 -0
  62. package/skills/game-development/2d-games/SKILL.md +129 -0
  63. package/skills/game-development/3d-games/SKILL.md +145 -0
  64. package/skills/game-development/SKILL.md +175 -0
  65. package/skills/game-development/game-art/SKILL.md +195 -0
  66. package/skills/game-development/game-audio/SKILL.md +200 -0
  67. package/skills/game-development/game-design/SKILL.md +139 -0
  68. package/skills/game-development/mobile-games/SKILL.md +118 -0
  69. package/skills/game-development/multiplayer/SKILL.md +142 -0
  70. package/skills/game-development/pc-games/SKILL.md +154 -0
  71. package/skills/game-development/vr-ar/SKILL.md +133 -0
  72. package/skills/game-development/web-games/SKILL.md +160 -0
  73. package/skills/game-engine/SKILL.md +140 -0
  74. package/skills/game-engine/assets/2d-maze-game.md +528 -0
  75. package/skills/game-engine/assets/2d-platform-game.md +1855 -0
  76. package/skills/game-engine/assets/gameBase-template-repo.md +310 -0
  77. package/skills/game-engine/assets/paddle-game-template.md +1528 -0
  78. package/skills/game-engine/assets/simple-2d-engine.md +507 -0
  79. package/skills/game-engine/references/3d-web-games.md +754 -0
  80. package/skills/game-engine/references/algorithms.md +843 -0
  81. package/skills/game-engine/references/basics.md +343 -0
  82. package/skills/game-engine/references/game-control-mechanisms.md +617 -0
  83. package/skills/game-engine/references/game-engine-core-principles.md +695 -0
  84. package/skills/game-engine/references/game-publishing.md +352 -0
  85. package/skills/game-engine/references/techniques.md +894 -0
  86. package/skills/game-engine/references/terminology.md +354 -0
  87. package/skills/game-engine/references/web-apis.md +1394 -0
  88. package/skills/theone-cocos-standards/SKILL.md +557 -0
  89. package/skills/theone-cocos-standards/references/framework/component-system.md +645 -0
  90. package/skills/theone-cocos-standards/references/framework/event-patterns.md +433 -0
  91. package/skills/theone-cocos-standards/references/framework/playable-optimization.md +429 -0
  92. package/skills/theone-cocos-standards/references/framework/size-optimization.md +308 -0
  93. package/skills/theone-cocos-standards/references/language/modern-typescript.md +658 -0
  94. package/skills/theone-cocos-standards/references/language/performance.md +580 -0
  95. package/skills/theone-cocos-standards/references/language/quality-hygiene.md +582 -0
  96. package/skills/theone-cocos-standards/references/review/architecture-review.md +250 -0
  97. package/skills/theone-cocos-standards/references/review/performance-review.md +288 -0
  98. package/skills/theone-cocos-standards/references/review/quality-review.md +239 -0
  99. package/dist/chunk-RIK7IXSW.js.map +0 -1
@@ -0,0 +1,475 @@
1
+ ---
2
+ name: cocos-creator-3x-cn
3
+ description: 提供 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 时使用。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # Cocos Creator 3.8 开发指导技能
8
+
9
+ ## 元信息 (Frontmatter)
10
+
11
+ - **技能名称**: `cocos-creator-3x-cn`
12
+ - **适用引擎**: Cocos Creator 3.8 (LTS)
13
+ - **语言**: TypeScript (ES Module, `import { ... } from 'cc'`)
14
+ - **官方文档**: https://docs.cocos.com/creator/3.8/manual/zh/
15
+ - **API 参考**: https://docs.cocos.com/creator/3.8/api/zh/
16
+
17
+ ---
18
+
19
+ ## 快速参考 — 与 2.x 的核心差异
20
+
21
+ | 项目 | 2.x 写法 | 3.8 写法 |
22
+ |------|----------|----------|
23
+ | 导入 | `const { ccclass } = cc._decorator` | `import { _decorator } from 'cc'; const { ccclass } = _decorator;` |
24
+ | 组件基类 | `cc.Component` | `Component` (从 `'cc'` 导入) |
25
+ | 节点类 | `cc.Node` | `Node` (从 `'cc'` 导入) |
26
+ | 调试宏 | `CC_DEBUG` | `import { DEBUG } from 'cc/env';` |
27
+ | 全局事件 | `cc.systemEvent` | `import { input, Input } from 'cc';` |
28
+ | 资源加载 | `cc.resources.load()` | `import { resources } from 'cc'; resources.load()` |
29
+ | 缓动 | `cc.tween()` | `import { tween } from 'cc'; tween()` |
30
+ | 实例化 | `cc.instantiate()` | `import { instantiate } from 'cc';` |
31
+ | 场景管理 | `cc.director` | `import { director } from 'cc';` |
32
+ | 属性类型 | `cc.Integer` | `import { CCInteger } from 'cc';` |
33
+
34
+ ---
35
+
36
+ ## 1. 组件系统 (Component System)
37
+
38
+ ### 1.1 基础组件模板
39
+
40
+ ```typescript
41
+ import { _decorator, Component, Node } from 'cc';
42
+ const { ccclass, property } = _decorator;
43
+
44
+ @ccclass('MyComponent')
45
+ export class MyComponent extends Component {
46
+ @property(Node)
47
+ private readonly targetNode: Node | null = null;
48
+
49
+ @property
50
+ private readonly speed: number = 10;
51
+
52
+ // 生命周期见 §2
53
+ protected onLoad(): void { }
54
+ protected start(): void { }
55
+ protected update(dt: number): void { }
56
+ protected onDestroy(): void { }
57
+ }
58
+ ```
59
+
60
+ ### 1.2 装饰器速查
61
+
62
+ | 装饰器 | 说明 | 示例 |
63
+ |--------|------|------|
64
+ | `@ccclass('Name')` | 注册 cc 类(名称全局唯一) | `@ccclass('Player')` |
65
+ | `@property` | 序列化属性 | `@property speed = 10;` |
66
+ | `@property(Type)` | 指定类型 | `@property(Node) target: Node = null!;` |
67
+ | `@property({type: [Node]})` | 数组类型 | `children: Node[] = [];` |
68
+ | `@integer` | 整数类型简写 | `@integer count = 0;` |
69
+ | `@float` | 浮点类型简写 | `@float ratio = 1.0;` |
70
+ | `@type(T)` | 类型简写 | `@type(Node) target = null;` |
71
+ | `@executeInEditMode` | 编辑器模式执行 | `@executeInEditMode(true)` |
72
+ | `@requireComponent(T)` | 依赖组件 | `@requireComponent(Sprite)` |
73
+ | `@executionOrder(n)` | 执行优先级 | `@executionOrder(-1)` |
74
+ | `@disallowMultiple` | 禁止重复添加 | `@disallowMultiple(true)` |
75
+ | `@menu('path')` | 添加到组件菜单 | `@menu('Custom/MyComp')` |
76
+
77
+ ### 1.3 属性参数
78
+
79
+ ```typescript
80
+ @property({
81
+ type: Node,
82
+ visible: true,
83
+ displayName: '目标节点',
84
+ tooltip: '要跟随的目标',
85
+ serializable: true,
86
+ group: { name: '基础设置' },
87
+ })
88
+ targetNode: Node | null = null;
89
+ ```
90
+
91
+ 常用参数: `type`, `visible`, `displayName`, `tooltip`, `serializable`, `readonly`, `min`, `max`, `step`, `range`, `slide`, `group`, `override`, `formerlySerializedAs`, `editorOnly`
92
+
93
+ ---
94
+
95
+ ## 2. 生命周期回调
96
+
97
+ 执行顺序:`onLoad` → `onEnable` → `start` → `update` / `lateUpdate` → `onDisable` → `onDestroy`
98
+
99
+ ```
100
+ ┌─────────┐ ┌──────────┐ ┌───────┐ ┌────────┐
101
+ │ onLoad │──▶│ onEnable │──▶│ start │──▶│ update │──┐
102
+ └─────────┘ └──────────┘ └───────┘ └────────┘ │
103
+ ▲ │
104
+ └─────────┘
105
+ ┌────────────┐
106
+ │ lateUpdate │
107
+ └────────────┘
108
+
109
+ ┌───────────┐ ┌─────────────┐
110
+ │ onDisable │──▶│ onDestroy │
111
+ └───────────┘ └─────────────┘
112
+ ```
113
+
114
+ | 回调 | 触发时机 | 典型用途 |
115
+ |------|---------|---------|
116
+ | `onLoad()` | 节点首次激活时(仅一次) | 初始化引用、获取组件 |
117
+ | `onEnable()` | 组件启用时 | 注册事件监听 |
118
+ | `start()` | 第一次 `update` 之前(仅一次) | 需要依赖其他组件 `onLoad` 完成 |
119
+ | `update(dt)` | 每帧调用 | 游戏逻辑、移动 |
120
+ | `lateUpdate(dt)` | 所有 `update` 后 | 跟随相机、后处理 |
121
+ | `onDisable()` | 组件禁用时 | 取消事件监听 |
122
+ | `onDestroy()` | 节点销毁时 | 资源释放、清理 |
123
+
124
+ **关键规则**:
125
+ - `onLoad` 中可确保节点已挂载到节点树
126
+ - 同一节点上组件的 `onLoad`/`onEnable`/`start` 按组件面板顺序执行,可通过 `@executionOrder` 控制
127
+ - `onEnable`/`onDisable` 配对使用:注册/注销事件监听
128
+ - `onDestroy` 中应释放所有动态加载资源的引用
129
+
130
+ ---
131
+
132
+ ## 3. 事件系统
133
+
134
+ ### 3.1 自定义事件 (EventTarget)
135
+
136
+ ```typescript
137
+ import { EventTarget } from 'cc';
138
+
139
+ // 创建全局事件总线
140
+ const eventTarget = new EventTarget();
141
+
142
+ // 监听
143
+ eventTarget.on('game-over', (score: number) => {
144
+ console.log('Game Over, score:', score);
145
+ });
146
+
147
+ // 发射(最多 5 个参数)
148
+ eventTarget.emit('game-over', 100);
149
+
150
+ // 取消监听
151
+ eventTarget.off('game-over', callback, target);
152
+ ```
153
+
154
+ **⚠️ 注意**: 不再推荐通过 `Node` 对象做自定义事件监听与发射。
155
+
156
+ ### 3.2 全局输入事件 (input)
157
+
158
+ ```typescript
159
+ import { _decorator, Component, input, Input, EventTouch, EventKeyboard, KeyCode } from 'cc';
160
+
161
+ @ccclass('InputExample')
162
+ export class InputExample extends Component {
163
+ protected onEnable(): void {
164
+ input.on(Input.EventType.TOUCH_START, this.onTouchStart, this);
165
+ input.on(Input.EventType.KEY_DOWN, this.onKeyDown, this);
166
+ }
167
+ protected onDisable(): void {
168
+ input.off(Input.EventType.TOUCH_START, this.onTouchStart, this);
169
+ input.off(Input.EventType.KEY_DOWN, this.onKeyDown, this);
170
+ }
171
+ private onTouchStart(event: EventTouch): void {
172
+ console.log(event.getLocation()); // 屏幕坐标
173
+ console.log(event.getUILocation()); // UI 坐标
174
+ }
175
+ private onKeyDown(event: EventKeyboard): void {
176
+ if (event.keyCode === KeyCode.SPACE) { /* ... */ }
177
+ }
178
+ }
179
+ ```
180
+
181
+ 全局输入事件类型:
182
+
183
+ | 类别 | 事件类型 |
184
+ |------|---------|
185
+ | 触摸 | `TOUCH_START`, `TOUCH_MOVE`, `TOUCH_END`, `TOUCH_CANCEL` |
186
+ | 鼠标 | `MOUSE_DOWN`, `MOUSE_MOVE`, `MOUSE_UP`, `MOUSE_WHEEL` |
187
+ | 键盘 | `KEY_DOWN`, `KEY_PRESSING`, `KEY_UP` |
188
+ | 重力 | `DEVICEMOTION` |
189
+
190
+ ### 3.3 节点事件
191
+
192
+ ```typescript
193
+ // UI 节点触摸(需要 UITransform 组件)
194
+ this.node.on(Node.EventType.TOUCH_START, (event: EventTouch) => {
195
+ event.propagationStopped = true; // 阻止冒泡
196
+ }, this);
197
+
198
+ // 使用捕获阶段
199
+ this.node.on(Node.EventType.TOUCH_START, callback, this, true);
200
+
201
+ // 事件穿透(v3.4+)
202
+ private onTouchStart(event: EventTouch): void {
203
+ event.preventSwallow = true; // 阻止事件被吞噬
204
+ }
205
+ ```
206
+
207
+ ### 3.4 自定义节点事件派发
208
+
209
+ ```typescript
210
+ import { Event } from 'cc';
211
+
212
+ class MyEvent extends Event {
213
+ public readonly detail: unknown;
214
+ constructor(name: string, bubbles?: boolean, detail?: unknown) {
215
+ super(name, bubbles);
216
+ this.detail = detail;
217
+ }
218
+ }
219
+
220
+ // 派发事件(支持冒泡/捕获)
221
+ this.node.dispatchEvent(new MyEvent('custom-event', true, { data: 123 }));
222
+ ```
223
+
224
+ ---
225
+
226
+ ## 4. 资源管理 (Asset Manager)
227
+
228
+ ### 4.1 resources 加载
229
+
230
+ ```typescript
231
+ import { resources, Prefab, SpriteFrame, Texture2D, instantiate, Sprite } from 'cc';
232
+
233
+ // 加载 Prefab
234
+ resources.load('prefabs/enemy', Prefab, (err, prefab) => {
235
+ const node = instantiate(prefab);
236
+ this.node.addChild(node);
237
+ });
238
+
239
+ // 加载 SpriteFrame(注意路径到子资源)
240
+ resources.load('images/bg/spriteFrame', SpriteFrame, (err, sf) => {
241
+ this.getComponent(Sprite)!.spriteFrame = sf;
242
+ });
243
+
244
+ // 批量加载
245
+ resources.loadDir('textures', Texture2D, (err, assets) => { /* ... */ });
246
+
247
+ // 预加载
248
+ resources.preload('images/bg/spriteFrame', SpriteFrame);
249
+ ```
250
+
251
+ ### 4.2 Asset Bundle
252
+
253
+ ```typescript
254
+ import { assetManager, Prefab } from 'cc';
255
+
256
+ // 加载 Bundle
257
+ assetManager.loadBundle('gameBundle', (err, bundle) => {
258
+ // 加载 Bundle 中的资源
259
+ bundle.load('prefabs/player', Prefab, (err, prefab) => { /* ... */ });
260
+ // 批量加载
261
+ bundle.loadDir('textures', (err, assets) => { /* ... */ });
262
+ // 加载场景
263
+ bundle.loadScene('level1', (err, scene) => {
264
+ director.runScene(scene);
265
+ });
266
+ });
267
+
268
+ // 获取已加载的 Bundle
269
+ const bundle = assetManager.getBundle('gameBundle');
270
+ ```
271
+
272
+ ### 4.3 资源释放
273
+
274
+ ```typescript
275
+ import { assetManager, resources, SpriteFrame } from 'cc';
276
+
277
+ // 方式一:直接释放
278
+ assetManager.releaseAsset(asset);
279
+
280
+ // 方式二:通过 Bundle 释放
281
+ bundle.release('image', SpriteFrame);
282
+ bundle.releaseAll();
283
+
284
+ // 方式三:引用计数管理
285
+ resources.load('img/spriteFrame', SpriteFrame, (err, sf) => {
286
+ sf.addRef(); // 持有时增加引用
287
+ // ... 使用中
288
+ sf.decRef(); // 不再使用时减少引用
289
+ });
290
+
291
+ // 移除 Bundle
292
+ assetManager.removeBundle(bundle);
293
+ ```
294
+
295
+ ### 4.4 远程资源加载
296
+
297
+ ```typescript
298
+ import { assetManager, ImageAsset, Texture2D, SpriteFrame } from 'cc';
299
+
300
+ assetManager.loadRemote<ImageAsset>('https://example.com/avatar.png', (err, imageAsset) => {
301
+ const texture = new Texture2D();
302
+ texture.image = imageAsset;
303
+ const sf = new SpriteFrame();
304
+ sf.texture = texture;
305
+ });
306
+ ```
307
+
308
+ ---
309
+
310
+ ## 5. 缓动系统 (Tween)
311
+
312
+ ```typescript
313
+ import { tween, Vec3, Node, UIOpacity } from 'cc';
314
+
315
+ // 基础缓动
316
+ tween(this.node)
317
+ .to(1, { position: new Vec3(100, 200, 0) })
318
+ .start();
319
+
320
+ // 链式动画
321
+ tween(this.node)
322
+ .to(0.5, { scale: new Vec3(1.2, 1.2, 1) })
323
+ .to(0.5, { scale: new Vec3(1, 1, 1) })
324
+ .union() // 合并为一个动作
325
+ .repeatForever() // 无限循环
326
+ .start();
327
+
328
+ // 回调
329
+ tween(this.node)
330
+ .to(1, { position: new Vec3(0, 100, 0) })
331
+ .call(() => { console.log('done'); })
332
+ .start();
333
+
334
+ // 并行 & 延迟
335
+ tween(this.node)
336
+ .parallel(
337
+ tween().to(1, { position: new Vec3(100, 0, 0) }),
338
+ tween().to(1, { scale: new Vec3(2, 2, 1) }),
339
+ )
340
+ .delay(0.5)
341
+ .start();
342
+
343
+ // 透明度缓动(需要 UIOpacity 组件)
344
+ const opacity = this.node.getComponent(UIOpacity)!;
345
+ tween(opacity).to(0.5, { opacity: 0 }).start();
346
+
347
+ // 停止缓动
348
+ Tween.stopAllByTarget(this.node);
349
+ ```
350
+
351
+ ---
352
+
353
+ ## 6. 节点与场景操作
354
+
355
+ ### 6.1 节点访问
356
+
357
+ ```typescript
358
+ // 子节点
359
+ const child = this.node.getChildByName('child');
360
+ const children = this.node.children;
361
+ const childByPath = find('Canvas/UI/Button', this.node); // 路径查找
362
+
363
+ // 父节点
364
+ const parent = this.node.parent;
365
+
366
+ // 全局查找
367
+ import { find } from 'cc';
368
+ const canvas = find('Canvas');
369
+
370
+ // 组件获取
371
+ const sprite = this.node.getComponent(Sprite);
372
+ const sprites = this.node.getComponentsInChildren(Sprite);
373
+ ```
374
+
375
+ ### 6.2 节点变换
376
+
377
+ ```typescript
378
+ import { Vec3, Quat } from 'cc';
379
+
380
+ // 位置
381
+ this.node.setPosition(new Vec3(100, 200, 0));
382
+ this.node.position = new Vec3(100, 200, 0);
383
+
384
+ // 旋转 (3D 使用 Quat)
385
+ this.node.setRotationFromEuler(0, 0, 45);
386
+ this.node.angle = 45; // 2D 简写
387
+
388
+ // 缩放
389
+ this.node.setScale(new Vec3(2, 2, 1));
390
+
391
+ // 世界坐标
392
+ const worldPos = this.node.worldPosition;
393
+ this.node.setWorldPosition(worldPos);
394
+ ```
395
+
396
+ ### 6.3 场景管理
397
+
398
+ ```typescript
399
+ import { director } from 'cc';
400
+
401
+ // 加载并切换场景
402
+ director.loadScene('GameScene');
403
+
404
+ // 带回调
405
+ director.loadScene('GameScene', (err, scene) => {
406
+ console.log('scene loaded');
407
+ });
408
+
409
+ // 预加载场景
410
+ director.preloadScene('GameScene', (err) => {
411
+ // 预加载完成
412
+ });
413
+
414
+ // 常驻节点
415
+ director.addPersistRootNode(this.node);
416
+ director.removePersistRootNode(this.node);
417
+ ```
418
+
419
+ ---
420
+
421
+ ## 7. 平台宏与条件编译
422
+
423
+ ```typescript
424
+ import { sys } from 'cc';
425
+ import { DEBUG, EDITOR, PREVIEW, BUILD } from 'cc/env';
426
+
427
+ // 环境宏
428
+ if (DEBUG) { /* 调试模式 */ }
429
+ if (EDITOR) { /* 编辑器模式 */ }
430
+ if (BUILD) { /* 构建后 */ }
431
+
432
+ // 平台判断
433
+ if (sys.isBrowser) { /* 浏览器 */ }
434
+ if (sys.isNative) { /* 原生平台 */ }
435
+ if (sys.platform === sys.Platform.WECHAT_GAME) { /* 微信小游戏 */ }
436
+ ```
437
+
438
+ ---
439
+
440
+ ## 8. 模块导入规范
441
+
442
+ ```typescript
443
+ // ✅ 正确:从 'cc' 模块导入
444
+ import { _decorator, Component, Node, Vec3, Color, Sprite, resources } from 'cc';
445
+
446
+ // ✅ 正确:从 'cc/env' 导入环境宏
447
+ import { DEBUG, EDITOR } from 'cc/env';
448
+
449
+ // ❌ 错误:不要使用 cc. 全局前缀
450
+ // cc.Component, cc.Node, cc.find // 3.x 中不存在
451
+ ```
452
+
453
+ ---
454
+
455
+ ## 参考文件索引
456
+
457
+ ### 框架参考 (references/framework/)
458
+ | 文件 | 说明 |
459
+ |------|------|
460
+ | [component-system.md](references/framework/component-system.md) | 组件系统、装饰器、生命周期详解 |
461
+ | [event-patterns.md](references/framework/event-patterns.md) | 事件系统、输入/节点/自定义事件模式 |
462
+ | [asset-management.md](references/framework/asset-management.md) | 资源管理、加载/释放/Bundle |
463
+ | [playable-optimization.md](references/framework/playable-optimization.md) | 可试玩广告优化、包体/性能策略 |
464
+
465
+ ### 语言参考 (references/language/)
466
+ | 文件 | 说明 |
467
+ |------|------|
468
+ | [quality-hygiene.md](references/language/quality-hygiene.md) | TypeScript 代码质量与卫生规范 |
469
+ | [performance.md](references/language/performance.md) | 性能优化指南、内存/渲染/逻辑 |
470
+
471
+ ### 审查参考 (references/review/)
472
+ | 文件 | 说明 |
473
+ |------|------|
474
+ | [architecture-review.md](references/review/architecture-review.md) | 架构审查清单 |
475
+ | [quality-review.md](references/review/quality-review.md) | 代码质量审查清单 |