客户端 vs Cocos Creator 引擎功能差距分析
Context
用户需要知道当前 TypeScript 客户端还有多少 Cocos Creator 引擎功能尚未使用。以下对比将引擎提供的 API 与客户端实际实现进行对照。
一、客户端已实现的功能
核心基础设施 (100% 完成)
| 类别 | 已实现 | 文件数 |
|---|---|---|
| Core (二进制/数据加载) | 7/7 | BinaryReader, AdrnLoader, MapLoader, PaletteLoader, RdDecoder, SpriteLoader |
| Data Tables (CSV 数据表) | 16/16 | Item, Enemy, Magic, Skill, Profession, Encounter, Mission, Group, Effect, Atom 等 |
| Rendering (等距渲染) | 3/3 | MapRenderer, IsometricRenderer, BitmapCache |
| Networking (网络协议) | 8/8 | WebSocketClient, TeaCipher, LoginFlow, GameClient, Protocol 等 |
| Game Systems (游戏逻辑) | 32/32 | Battle, PetSystem, Equipment, Party, Friend, Trading, Quest, Guild, Mail, Buff, Sound, Weather, WarpEffect, MiniGame, TouchController 等 |
Cocos 视图 (94% 完成 — 7 个 TODO)
| 文件 | TODO 项目 | 状态 |
|---|---|---|
| GameApp.ts:694 | MainMenu 中 skill 按钮未连接到 SkillView | 空函数 |
| GameApp.ts:696 | 帮助对话框显示 "TODO: 帮助内容" | 占位文本 |
| GameApp.ts:697 | 设置对话框显示 "TODO: 系统设置" | 占位文本 |
| GameApp.ts:826 | BottomToolbar 装备按钮复用 InventoryView | 无独立 EquipmentView |
| BattleView.ts:286 | 战斗中使用道具 | "待实现" |
| BattleView.ts:298 | 战斗中切换宠物 | "待实现" |
| BattleView.ts:310 | 战斗中宠物技能 | "待实现" |
二、引擎有但客户端未使用的功能
1. 音频系统 — 部分使用
引擎提供: AudioSource 组件、AudioClip、AudioManager(中央音频控制器,支持音量/音调控制)
客户端现状: game/SoundSystem.ts 使用原生 HTMLAudioElement,未使用引擎的 AudioSource/AudioManager
差距: 无法使用引擎的音频管理器特性(批量播放、音量混音、音频池)
2. 动画系统 — 完全未使用
引擎提供: Animation 组件、AnimationClip、曲线动画、Animation Graph (Marionette)、CrossFade、CubicSplineValue
客户端现状: 角色动画通过手动切换 sprite frame 实现(CharacterView 中帧索引递增)
差距:
- 无法制作平滑的角色过渡动画(跑动↔待机↔受伤)
- 无法制作 UI 动画(菜单弹出、按钮缩放、面板滑动)
- 无法制作战斗特效动画(伤害数字弹出、状态图标闪烁)
- 无法使用曲线插值(缓入缓出)
3. UI 布局组件 — 完全未使用
引擎提供: Layout(水平/垂直/网格/自适应缩放)、ScrollView、PageView、Toggle/ToggleContainer、Slider、ProgressBar、EditBox、RichText、Button(4 态转换)
客户端现状: 所有 UI 手动定位 + 手动拖拽(DragHelper)。InventoryView/PetView 等面板没有使用 Layout 或 ScrollView。
差距:
- 道具列表、宠物列表、聊天消息等长列表无法滚动
- 装备槽位无法自动排列(Layout 可自动处理)
- 等级进度条、经验条等手动用 Graphics 绘制,应改用 ProgressBar 组件
- 聊天输入框手动实现,应使用 EditBox
- 技能/职业树展示无法自动排列
4. 粒子系统 — 部分使用
引擎提供: ParticleSystem2D(2D 粒子)、ParticleSystem(3D 粒子)、MotionStreak(拖尾效果)
客户端现状: game/WeatherSystem.ts 和 game/MapEffects.ts 标记了"粒子天气"和"粒子地图效果",但实际实现需查看具体代码。game/WarpEffect.ts 有转场动画效果。
差距:
- 战斗伤害数字/治疗数字目前可能是手动 DOM 动画,可用 ParticleSystem2D 做华丽效果
- 角色移动轨迹、技能释放效果可用 MotionStreak
- 天气效果(雨/雪/雾)可用引擎粒子系统
5. 物理系统 — 完全未使用
引擎提供: RigidBody2D、BoxCollider2D、CircleCollider2D、PolygonCollider2D、9 种 Joint(Hinge/Distance/Spring/Mouse/Slider/Fixed/Relative/Wheel)
客户端现状: 碰撞检测完全手动(GroundItemRenderer.hitTest、坐标距离判断)
差距: 对 2D 等距 RPG 游戏来说物理引擎非必需,碰撞检测手动实现足够。此项可以跳过。
6. 资源加载系统 — 部分使用
引擎提供: Bundle 系统、resources.load()、依赖管理、资源池、预加载/释放
客户端现状: 手动 fetchBinary() + 自定义 SpriteStore 缓存。已实现 Range 请求优化。
差距: 引擎的资源管线(下载→解析→缓存→释放)更完善,但客户端的自定义方案已能工作。此项可跳过。
7. Shader/Material — 完全未使用
引擎提供: Material、Pass、ProgramLibrary、RenderPipeline、ToneMapping
客户端现状: 无自定义 shader,纯 sprite rendering
差距: 如需高级视觉效果(屏幕特效、角色发光、水面波纹)需使用,但当前阶段非必需。可跳过。
8. 视频播放 — 未使用
引擎提供: VideoPlayer 组件、VideoClip
客户端现状: 无视频功能
差距: 如有过场动画/宣传片需求才需要。非必需。
9. WebView — 未使用
引擎提供: WebView 组件
客户端现状: 无 WebView
差距: 如有用户协议/客服/外部链接内嵌才需要。非必需。
10. 骨骼动画 — 完全未使用
引擎提供: Skeleton 组件(Spine 运行时)、ArmatureDisplay(DragonBones)
客户端现状: 所有角色/敌人用静态 sprite frame + 帧索引动画
差距: 引擎已内置 Spine/DragonBones 支持。如果后续美术资源升级为骨骼动画(平滑动作),可以直接使用。长期有价值,当前可跳过。
11. 输入系统 — 部分使用
引擎提供: Input 组件、SystemEvent(触摸/键盘/鼠标/手柄抽象)
客户端现状: 使用 cc.systemEvent(SystemEvent)处理键盘,手动监听 touch/mouse 事件
差距: 引擎的 Input 系统提供了按键映射、多触控追踪等能力。客户端的手动实现基本等价,但无法利用引擎的按键绑定系统。可跳过或逐步迁移。
12. tween/缓动系统 — 完全未使用
引擎提供: tween API(.to/.by/.set/.call/.delay)、48 种缓动函数(quad/cubic/quint/sine/expo/circ/elastic/bounce)
客户端现状: 无缓动动画,UI 切换全部瞬间完成
差距:
- 面板打开/关闭的滑入滑出动画
- 按钮点击反馈动画
- 伤害数字弹跳动画
- 角色移动插值
13. 富文本 — 未使用
引擎提供: RichText 组件(HTML-like 标签格式化文本)
客户端现状: 聊天消息使用纯文本 Label
差距: 聊天中@提及高亮、彩色稀有度文字、链接点击等需要用 RichText。值得实现。
14. 调试工具 — 部分使用
引擎提供: Profiler 组件(帧率/渲染计数器)、debug-view
客户端现状: 大量 console.log 调试,无引擎 Profiler
差距: 可启用引擎 Profiler 监控性能。当前阶段可跳过。
15. 安全区域 — 未使用
引擎提供: SafeArea 组件
客户端现状: 手动计算(通过 cc.view.getSafeAreaRect())
差距: 引擎的 SafeArea 组件可以直接挂在节点上自动收缩到安全区域内,比手动计算更安全。建议实现。
16. TMX/Tiled 地图 — 未使用
引擎提供: TiledMap、TiledLayer、TiledObjectGroup
客户端现状: 自定义 .dat 格式地图
差距: 引擎已支持标准 Tiled 编辑器格式,但当前自定义格式已能工作。如后续改用 Tiled 编辑器可考虑。
三、差距优先级排序
P0 — 立即需要(直接影响玩家体验)
- tween 缓动系统 — UI 面板切换、按钮交互、战斗特效需要动画
- Layout 组件 — 列表类 UI(道具/宠物/技能)需要自动排列
- ScrollView 组件 — 聊天消息、道具列表需要滚动
- RichText 组件 — 聊天消息格式化(稀有度颜色、@提及高亮)
- SafeArea 组件 — 灵动岛/刘海遮挡问题
P1 — 近期需要
- Animation 组件 — 角色待机/跑动平滑过渡,UI 动效
- ProgressBar 组件 — HP/MP/经验条用 ProgressBar 替代 Graphics
- EditBox 组件 — 聊天输入框、好友搜索等
P2 — 长期优化
- ParticleSystem2D — 战斗特效、天气效果
- Spine/DragonBones — 骨骼动画(美术升级时)
- AudioSource/AudioManager — 音频管理现代化
P3 — 非必需
- 物理系统 — 2D RPG 不需要
- VideoPlayer/WebView — 视需求添加
- TMX/Tiled — 已有自定义格式工作正常
- Shader/Material — 后期优化时考虑
- Profiler — 性能分析用
四、关键文件对照
| 引擎组件 | 客户端替代方案 | 差距影响 |
|---|---|---|
| tween API | 无 | P0 — UI 体验粗糙 |
| Layout | 手动 setPosition | P0 — 列表无法自适应 |
| ScrollView | 无 | P0 — 长列表溢出屏幕 |
| RichText | Label 纯文本 | P1 — 聊天无法格式化 |
| SafeArea | 手动计算 margin | P0 — 灵动岛遮挡 |
| Animation | 手动帧切换 | P1 — 无平滑过渡 |
| ProgressBar | Graphics 手动绘制 | P1 — 重复造轮子 |
| EditBox | 手动 input 监听 | P1 — 输入体验不一致 |
| ParticleSystem2D | WeatherSystem.ts 占位 | P2 — 特效质量 |
| AudioSource | HTMLAudioElement | P2 — 音频管理简陋 |
| Spine Skeleton | 静态 sprite | P2 — 动画质量 |
评论
评论功能即将上线,敬请期待。