Files
NumberSwipe_New/modes/02-connect-1234/docs/HANDOFF.md
T
cabinw 8026e4628d 初始提交:三玩法 Web 原型与设计文档
- 玩法一 数字一笔:规则库、求解器、26 关、竖屏触摸 Web 原型、测试
- 玩法二 连连气球:连消畅玩版核心、Web 原型、Cocos 球槽组件与导出脚本
- 玩法三 六边一笔:规则库、求解器、10 关 + 转墙实验包、Web 原型、测试
- 产品文档、UI 设计规范、各玩法 GDD / HANDOFF
- 文档移除全部外部参考作引用;删除玩法二 v0 旧稿
2026-09-16 14:30:59 +08:00

4.2 KiB
Raw Blame History

连连气球 · Cocos Creator 接入

当前交付是可玩的 Web 畅连版,以及同源 TypeScript 核心和 Creator 球槽组件。组件已使用本机 Creator 3.8.8 的真实 cc.d.ts 检查;Cocos 场景、手机原生包尚未运行验收。

导出与球槽

npm run cocos:check
npm run cocos:export -- /你的工程/assets/modes/02-connect-1234

默认生成 cocos/export/02-connect-1234/,每次重新生成,包含当前核心和 adapters/Connect1234Board.ts。自定义导出只写文件,不删除已有工程文件;从 v1 升级时建议导入新目录。JSON 常量导出为 TypeScript 数据模块,减少对宿主打包方式的依赖。

  1. 创建本玩法 2D 场景,Canvas 建议 720 × 1280。
  2. 创建 Board,添加 UITransform,尺寸例如 640 × 740;挂 Connect1234Board。
  3. 设置 seed,默认 1234。没有关卡编号。
  4. 球槽添加矩形 Mask 裁掉顶部进入的气球;背景、顶栏、能量条和工具按钮在宿主 UI 搭建。

逻辑坐标 360 × 416,左上原点,Y 向下。组件用 UITransform.convertToNodeSpaceAR 转换触摸,等比缩放并兼容任意锚点。只接受一根手指,触摸取消不提交;弹窗或切后台时禁用 Board 组件以取消当前手势。

方法与事件

方法 行为
startNew(seed?) 新开畅玩局,省略种子时使用当前时间
retry() 用相同种子重新开始
undo() 撤销上一操作,含补球、彩虹和微风
showHint() 显示可以实际滑出的提示链
shuffle() 免费微风重排并播放掉落
snapshot() 完整、可序列化状态副本

在宿主组件 start 中订阅并主动读取初始 snapshot(),避免错过 Board 的 onLoad 事件:

board.on('balloon-hud', ({ snapshot, canUndo, busy, fever }) => {
  // 分数、最大数字、能量、剩余双倍次数、queue 前 3 项;busy 时禁用工具。
});
board.on('balloon-reaction', (stage, doubled) => {
  // 每段合成的浮字/短音:stage.points、stage.index、stage.created。
});
board.on('balloon-settled', (result, snapshot) => {
  // 更新本地纪录;result.feverStarted 提示下一次开始双倍。
});

balloon-merge 在整次操作开始发出完整 FlowResult,含按序的 beats。不发过关或失败事件,不自动弹结算页。

规则、显示与存档

  • FlowGame.commit(ids) 同步计算最终稳定状态,返回 merge → fall → merge… 时间线。FlowAnimation 按毫秒重放,无 DOM 或帧率依赖。
  • FlowResult.stages 是所有合成段;beats 是真实播放顺序;最终盘面读 result.supply.balls 或 game.balls。result.balls 是最后一次合成后、最终补球前的盘面。
  • 数字预告先兑现再补后续袋;掉落物理与自动接力不由宿主帧率决定。
  • view.ts 的椭圆、路径、文字指令映射到 Graphics + Label。Label 节点池复用,支持数字描边;发布时可改成气球 Sprite + Label 池。
  • record.ts 与 StoragePort 适配 sys.localStorage,键为 mode:02-connect-1234:balloons-v2。记录最高分、最大数、连消、放飞和声音设置,不保存中途局面。
import { sys } from 'cc';
import { loadRecord, recordRound, saveRecord } from './src/record';
const storage = {
  read: (key: string) => sys.localStorage.getItem(key),
  write: (key: string, value: string) => sys.localStorage.setItem(key, value),
};
const record = loadRecord(storage);
// 每次 balloon-settled:recordRound(record, snapshot.stats); saveRecord(storage, record);

性能与后续验收

最多 24 球;稳定时仅绘制,提交时试算少量落点。所有补给随机搜索有上限。测量脚本输出本机提交耗时,见 QA;真机需重新测量,必要时将供给候选计算移入宿主分帧任务,同时保持同一随机序列。

不要直接换成帧率驱动的 Box2D 落点再复用当前数据假定;更换物理后需重新验证邻接、补给和手势路线。

npm run check
COCOS_TYPES=/路径/cc.d.ts npm run cocos:check

移植阶段剩余:Creator 实际场景、Mask 与安全区、音频、减少动态效果配置、前后台生命周期、Android/iOS 与目标小游戏平台触摸及性能验收。