You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
AdLike2048/docs/项目分析报告.md

17 KiB

AdLikeXy 项目分析报告

分析日期:2026-08-17
引擎版本:Cocos Creator 3.8.8
项目 UUID:d7fce9be-f307-4e7f-a8f5-3d0b5ca1e096

说明:本文描述的是 自老项目复制而来的代码基线。当前仓库正基于此开发 新产品;工作约定与迭代方向见 项目说明.md。


1. 项目定位

AdLikeXy 是一款基于 Cocos Creator 3.x 开发的 休闲塔防 + 汉字背包合成 类小游戏,面向 微信 / 抖音(头条)/ 快手 等国内小游戏平台发行,以 广告变现 为核心商业模式。

当前默认 SDK 配置(DefaultConfig)对应产品:

项 值
游戏名 守不住就开摆
渠道 抖音小游戏(chanId: tt)
AppID tt35ac4311abcd762602
版本 1.1.8

项目名称 AdLikeXy 表明这是同一玩法内核下的 广告向变体/分支(与多份 sdk/config/*Config.ts 多渠道马甲包配置一致)。同一套代码通过切换 sdkConfig.config 可打包为不同平台、不同马甲名的多款小游戏。

1.1 核心玩法概括

  1. 局外养成:章节闯关、武器/角色升级、商店、签到、任务、副本、转盘、基金/月卡等商业化模块。
  2. 局内战斗:12×10 格子塔防地图,玩家在 备战阶段(PREP) 通过 背包合成(Merge) 摆放汉字武器/字块,在 战斗阶段(COMBAT) 抵御多波怪物进攻。
  3. Roguelike 强化:战斗中 三选 1 词条(Skill 表) 强化塔属性或替换主动技能。
  4. 引流小游戏:高压锅、弹弹弹等独立子玩法(attractingTrafficGame 分包),用于获客或活动引流。

1.2 题材与风格

  • 武器以 汉字/组合字 为视觉载体(刀、组合字块、扩展格子等,Weapon2 表 type 1~4)。
  • 带有 剧情线、财经新闻、微信聊天 等叙事/UI 元素,偏轻松搞笑网文风。
  • 设计分辨率 750×1600,竖屏,fitHeight 适配。

2. 技术栈

层级 技术
引擎 Cocos Creator 3.8.8
语言 TypeScript(assets 下约 684 个 .ts 文件)
物理 2D 物理(技能/怪物/门等多碰撞组)
动画 Spine(含运行时 patch)
配表 Excel → JSON(excel-to-json-ts 扩展)
数据打点 Gravity Analytics(GEMgr)+ 自研 PF- 性能通道
广告 SDK 平台激励视频/插屏/Banner + ZYSDK 聚合
存档 本地 + SDK 云存档合并(gg.data)

3. 整体架构

项目采用 「MX 通用框架层 + 业务脚本层」 双层结构:

┌─────────────────────────────────────────────────────────┐
│  GameLaunch(入口)→ BootPipeline → GameController      │
├─────────────────────────────────────────────────────────┤
│  assets/script/          业务层(UI、战斗适配、SDK)     │
│  assets/mx/              框架层(UI/资源/战斗内核/ECS)  │
├─────────────────────────────────────────────────────────┤
│  assets/bundles/         Asset Bundle 分包资源           │
│  assets/scene/main.scene 单主场景                        │
└─────────────────────────────────────────────────────────┘

3.1 全局入口 gg

GG.ts 定义 GameGlobal 单例,通过 gg 暴露各模块:

模块 职责
gg.ui UI 管理(分层、弹窗动画、战斗暂停钩子)
gg.audio 音效/BGM
gg.res / gg.assets 资源包加载、预载、生命周期
gg.data 配表 + 玩家存档
gg.sdk 平台 SDK、广告、打点
gg.lang 多语言
gg.game GameController 游戏流程总控
gg.battle BattleService 战斗服务门面

3.2 启动流程

GameLaunch.ts 负责冷启动,采用 双门闩 机制:

  1. Boot 资源就绪(BootPipeline:核心表 + Boot 分包 + SDK 网络)
  2. SDK + 存档初始化完成(gg.data.init)

两者均完成后调用 gg.game.init() 进入大厅。启动后延迟阶段再执行:机型探测、内存档位、发热治理、性能打点分级等。

关键文件:

  • assets/script/GameLaunch.ts
  • assets/mx/module/boot/BootPipeline.ts
  • assets/script/game/GameController.ts

3.3 事件总线

跨模块通信使用 GEvent(assets/mx/module/event/GEvent.ts),例如:

  • SHOW_LOADING / HIDE_LOADING — 全局 Loading
  • SHOW_NET_UI — 网络等待 UI
  • MapGridsReady — 战斗地图格子就绪

4. 目录结构说明

AdLikeXy/
├── assets/
│   ├── scene/                 # 主场景 main.scene
│   ├── script/                # 业务脚本(约 507+ 文件)
│   │   ├── GameLaunch.ts      # 游戏入口组件
│   │   ├── game/              # 核心游戏逻辑、配表、性能
│   │   ├── battle/            # 战斗项目适配层(203 ts)
│   │   ├── ui/                # UI 界面(194 ts,Auto_* 代码生成)
│   │   ├── sdk/               # SDK、广告、多渠道配置
│   │   ├── manager/           # 章节/武器/任务等数据管理
│   │   ├── activity/          # 活动
│   │   ├── purchase/          # 内购
│   │   └── ...
│   ├── mx/                    # MX 框架(160 ts)
│   │   ├── module/            # 功能模块
│   │   │   ├── battle/        # 战斗内核(无 Cocos 依赖)
│   │   │   ├── merge/         # 背包合成内核
│   │   │   ├── res/           # 资源调度与预载
│   │   │   ├── ui/            # UI 框架 + PopAnim
│   │   │   ├── boot/          # 启动/热更管线
│   │   │   ├── ecs/           # ECS 基础
│   │   │   └── ...
│   │   └── tools/             # 通用工具
│   └── bundles/               # Asset Bundle 分包
│       ├── first/             # 首包(含 config/*.json 配表)
│       ├── comm/              # 公共资源
│       ├── home/ shop/ ...    # 主界面 Tab
│       ├── battleGame/        # 战斗 UI
│       ├── battleMap/         # 地图预制体
│       ├── lang/              # 多语言包
│       └── attractingTrafficGame/  # 引流小游戏
├── extensions/                # 编辑器扩展
│   ├── excel-to-json-ts/      # 配表导出
│   ├── mx-res-manager/        # 资源管理面板
│   ├── tools/                 # 构建钩子、MembershipSet 同步
│   └── 引用查找器3.x/
├── docs/                      # 项目文档
├── settings/                  # 项目设置(分辨率、物理、图层)
└── package.json               # 项目元信息

5. 战斗系统

战斗是项目最复杂的核心模块,采用 逻辑与表现分离 设计。

5.1 分层

层级 路径 说明
MX 内核 assets/mx/module/battle/ BattleSession、ECS、技能/伤害/波次,无 Cocos 依赖
项目适配 assets/script/battle/ BattleFacade、BattleRuntime、配表映射、地图加载
表现/UI assets/script/ui/BattleGame/ UIBattleGame、Monster、MapAgent

5.2 地图规格

  • 格子:12 行 × 10 列,每格 75×75 px
  • 地图预制体:bundles/battleMap/prefab/地图/mapLayer{mapId}.prefab
  • 寻路:8 方向距离场(MapManager + MapAgent)

5.3 战斗模式(BattleType)

枚举 说明
Level 主线关卡
InfiniteMode 无尽模式
GoldMode 金币模式
PropMode 道具模式
GachaMode 抽卡模式
BoxMode 宝箱模式
BossMode Boss 模式
PerimeterMode 循环圈副本
GuanyinMode 观音副本

章节配表约 95 条(Chapter.json),支持多难度(简单~末世 5 档)。

5.4 术语约定(重要)

对外说法 配表 含义
词条 Skill 三选 1 局内强化,可替换主动技能
技能 base_atk 真正战斗技能(普攻/主动)
塔 Weapon1 可放置单位数值
字块/棋子 Weapon2 背包合成用字块类型

详细接入文档:assets/script/battle/接入指南.md、assets/script/battle/docs/需求说明.md。

5.5 PVP 预留

架构已预留 mode: 'solo' | 'pvp'、playerId 多玩家上下文,但 当前不实现联机;新功能不得写死单玩家假设。


6. 背包合成(Merge)

局内备战阶段的 汉字武器摆放 由 MX merge 模块驱动:

  • assets/mx/module/merge/ — MergeSession、放置规则、升级系统
  • 与战斗层通过背包会话(bagSession)和部署同步(DeploySync)衔接
  • Weapon2 定义字块类型:单字武器、组合字、扩展格子、金手指

7. UI 系统

7.1 规模

  • UI 脚本目录:assets/script/ui/(约 194 个 .ts)
  • UIID 枚举约 75+ 个界面 ID(ConfigRes.ts)
  • 每个界面通常有 UI*.ts(逻辑)+ Auto_*.ts(节点绑定,代码生成)

7.2 主界面 Tab

UIID 模块
Home (101) 首页/章节选择
Shop (200) 商店
Role (201) 角色
Weapon (203) 武器
Replica (204) 副本

7.3 UI 框架能力

  • 分层管理(UILayer)、战斗 UI 打开时自动暂停战斗(BattleUiPauseGate)
  • popAnim 弹窗动画系统(预设、缓动、交错出现)
  • RuntimeLoadingGate 运行时 Loading 防抖与看门狗

8. SDK、广告与商业化

8.1 多渠道马甲配置

assets/script/sdk/config/ 含 20+ 份渠道配置,前缀含义:

前缀 平台
TT* 抖音/头条小游戏
Wx* / WX* 微信小游戏
KS* 快手
BL* B站等

构建时修改 sdkConfig.config 切换马甲包。

8.2 广告类型

  • 激励视频(RewardedVideoAd)— 复活、加速、奖励等
  • 插屏广告(InterstitialAd)
  • Banner
  • 录屏分享(TTRecording,抖音)

8.3 数据打点

通道 用途 入口
Gravity GEReportEvent 运营漏斗、广告次数 GEMgr
gg.sdk.reportPerf 性能辅助 PF-* 前缀 PerfReport.ts
30r SDK 微信侧补充打点 gg.sdk.initSdk30r

性能打点与广告统计已 严格隔离(避免 Android 等子串误计广告)。详见 docs/性能打点说明.md。

8.4 内购与付费

  • Purchase 模块支持 IAP(sdkConfig.isIAPVersion 控制)
  • 配表:Pay、ShopBuy、MonthCard、FirstBag、Fund、ContinueBag 等
  • 钻石商店、章节礼包、连续购买等 UI 均已实现

9. 资源管理与性能工程

本项目在 小游戏内存/加载 方向投入较多工程化能力:

9.1 分包策略(GBundle)

类型 Bundle 示例
首包常驻 first、comm、icons_boot、audio
主界面 home、shop、role、weapon、replica
战斗 battleGame、battleMap、battleGameMonster、battleHero
弹窗 popCommon、popBattle + allBuyShops 子包
多语言 lang_cn、lang_en

9.2 预载与调度

  • LoadScheduler — 加载队列与优先级
  • PreloadPredictor — 预测性预载(大厅暖机、章节预载)
  • BundleLifecycle — 分包释放策略
  • BattleBackgroundLoadGate — 战斗期后台加载门控
  • ResourcePhaseGate — 按阶段(Boot/大厅/战斗)切换资源策略

9.3 内存与帧率治理

  • MemoryProfile — 按机型分档(tier0/1/3)
  • MemoryDowngrade — 内存告警降档(停预载、大厅 30fps)
  • ThermalGovernor — 发热档位与帧率策略
  • DeviceCapability — 平台能力探测

9.4 性能监控

  • PerfReport / PerfLoadTimer / PerfSampler
  • 启动分级 PF-BOOT-TIER-*、加载 PF-LD-*、内存 PF-MEM-*、帧率 PF-THRM-FPS-*

10. 配表系统

10.1 存储位置

核心配表在 assets/bundles/first/config/*.json(约 51 张表),随 first 首包加载。

10.2 主要配表(TableNames)

类别 表名
关卡 Chapter、Chapter_monster、Chapter_weight、Replica
战斗 Weapon1~4、Monster、Monster2、base_atk、Skill、Skill_pool
经济 Item、Shop、Box、Pay、ShopBuy
养成 Role、Character、Skin、Task、TarTask
活动 LimitActivity、NewYearSign、NewFun、Playmode
常量 ConstConf、Guide、Obstacle

10.3 热更新

ConfigHotUpdate.ts + BootPipeline 支持远程表更新(fetchHotUpdateTables)。

10.4 配表工具

extensions/excel-to-json-ts — Excel 导出 JSON + TypeScript 接口(AutoTable.ts、interface/)。


11. 编辑器扩展

扩展 功能
excel-to-json-ts Excel → JSON/TS 配表流水线
mx-res-manager Vue 资源浏览器、引用分析、整理移动
tools 自定义构建钩子、MembershipSet 与业务同步
引用查找器3.x 资源引用查找

12. 代码规模统计

目录 TypeScript 文件数(约)
assets/ 总计 684
assets/script/ui/ 194
assets/script/battle/ 203
assets/mx/ 160
assets/script/ 其他 ~270

13. 关键依赖关系图

flowchart TB
    GL[GameLaunch] --> BP[BootPipeline]
    GL --> GC[GameController]
    BP --> Tables[配表加载]
    BP --> BootRes[Boot 资源包]
    BP --> SDK[SDK 初始化]
    Tables --> Data[gg.data.init]
    SDK --> Data
    Data --> GC
    BootRes --> GC
    GC --> UI[大厅 UI]
    GC --> Battle[BattleFacade]
    Battle --> MX[MX BattleSession]
    Battle --> Map[CocosBattleMapHost]
    Battle --> Presenter[怪物表现层]
    UI --> ResMgr[资源预载]
    SDK --> Ad[广告/打点]

14. 现有文档索引

文档 内容
docs/项目说明.md 新项目背景、目录约定与开发原则
docs/开发规范.md 开发规范(AI 生成代码强制标准)
docs/遗留代码收敛方案.md 遗留代码分阶段收敛
docs/性能打点说明.md 性能打点 PF-* 解读
assets/script/battle/接入指南.md 战斗接入指南
assets/script/battle/docs/需求说明.md 战斗需求与 PVP 约束
extensions/excel-to-json-ts/README.zh-CN.md 配表导出说明
extensions/mx-res-manager/README.md 资源管理扩展

15. 项目特点总结

优势

  1. 框架与业务分离清晰 — MX 层可跨项目复用,战斗/合成内核无引擎依赖。
  2. 小游戏工程化成熟 — 分包、预载、内存降档、性能打点体系完整。
  3. 多渠道马甲能力强 — 一份代码多 Config 切换,适配微信/抖音/快手。
  4. 战斗架构可扩展 — ECS + Ability/Effect、词条系统、多模式副本。
  5. 文档较完备 — 战斗、性能打点均有专项文档。

复杂度与注意点

  1. 代码体量大 — 600+ TS 文件,UI 界面众多,新人需从 GameLaunch → GameController → BattleFacade 路径入手。
  2. 术语易混淆 — Skill 表是「词条」而非「技能」,开发战斗功能前需读术语表。
  3. 单主场景 — 所有流程在 main.scene 内通过 UI 切换,无多场景跳转。
  4. Auto 生成文件 — Auto_*.ts 由工具生成,手改 UI 结构需同步生成逻辑。
  5. 广告与性能打点隔离 — 新增上报须走 PerfReport,避免误进 Gravity 广告统计。

16. 新人上手建议

  1. 用 Cocos Creator 3.8.8 打开工程,运行 main.scene。
  2. 阅读顺序:GameLaunch.ts → BootPipeline.ts → GameController.ts(init/enterMain)→ BattleFacade.ts。
  3. 改 UI:找到 UIID → UIConfigs → 对应 assets/script/ui/**/UI*.ts。
  4. 改战斗数值:first/config/*.json + TableBattleConfigProvider.ts。
  5. 改渠道包:复制/修改 sdk/config/*Config.ts,更新 sdkConfig.config。
  6. 性能相关改动:同步更新 PerfReport 并阅读 性能打点说明.md。

17. 结论

AdLikeXy 是一个 商业化成熟、工程化程度高 的 Cocos Creator 塔防小游戏 项目。它以汉字背包合成 + 格子塔防为核心玩法,围绕广告变现构建了完整的多渠道发行、资源性能治理和数据打点体系。代码上采用自研 MX 框架 承载 UI、资源、战斗、合成等通用能力,业务层专注关卡、UI 和平台适配,适合作为 国内小游戏塔防品类 的中大型工程参考。


本报告由代码静态分析生成,产品名与渠道信息以仓库内 DefaultConfig 为准,实际发行包以构建时 sdkConfig.config 为准。