石器时代重构-客户端对比

客户端 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 组件、AudioClipAudioManager(中央音频控制器,支持音量/音调控制)

客户端现状: 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.tsgame/MapEffects.ts 标记了"粒子天气"和"粒子地图效果",但实际实现需查看具体代码。game/WarpEffect.ts 有转场动画效果。

差距:

  • 战斗伤害数字/治疗数字目前可能是手动 DOM 动画,可用 ParticleSystem2D 做华丽效果
  • 角色移动轨迹、技能释放效果可用 MotionStreak
  • 天气效果(雨/雪/雾)可用引擎粒子系统

5. 物理系统 — 完全未使用

引擎提供: RigidBody2DBoxCollider2DCircleCollider2DPolygonCollider2D、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 地图 — 未使用

引擎提供: TiledMapTiledLayerTiledObjectGroup

客户端现状: 自定义 .dat 格式地图

差距: 引擎已支持标准 Tiled 编辑器格式,但当前自定义格式已能工作。如后续改用 Tiled 编辑器可考虑


三、差距优先级排序

P0 — 立即需要(直接影响玩家体验)

  1. tween 缓动系统 — UI 面板切换、按钮交互、战斗特效需要动画
  2. Layout 组件 — 列表类 UI(道具/宠物/技能)需要自动排列
  3. ScrollView 组件 — 聊天消息、道具列表需要滚动
  4. RichText 组件 — 聊天消息格式化(稀有度颜色、@提及高亮)
  5. SafeArea 组件 — 灵动岛/刘海遮挡问题

P1 — 近期需要

  1. Animation 组件 — 角色待机/跑动平滑过渡,UI 动效
  2. ProgressBar 组件 — HP/MP/经验条用 ProgressBar 替代 Graphics
  3. EditBox 组件 — 聊天输入框、好友搜索等

P2 — 长期优化

  1. ParticleSystem2D — 战斗特效、天气效果
  2. Spine/DragonBones — 骨骼动画(美术升级时)
  3. AudioSource/AudioManager — 音频管理现代化

P3 — 非必需

  1. 物理系统 — 2D RPG 不需要
  2. VideoPlayer/WebView — 视需求添加
  3. TMX/Tiled — 已有自定义格式工作正常
  4. Shader/Material — 后期优化时考虑
  5. 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 — 动画质量

评论

评论功能即将上线,敬请期待。