Files
integrate_sjtu/ARCH.md
T
2026-08-27 22:54:14 +08:00

2.1 KiB
Raw Blame History

ARCH — 合成交大(Integrate SJTU)

技术选型

模块划分

  • SVG_STRINGS / BADGE_CACHE:9 个校徽 SVG 内联字符串、data URI 加载与离屏 Canvas 缓存。
  • LEVELS / WEIGHTS:9 级半径/颜色/校名数据与解锁权重表。
  • 物理层:createWorld(引擎+三面墙)、createBall、isMergeable、doMerge、wakeNearbyBalls。
  • 玩法层:pickLevel(权重随机)、dropBall(冷却)、combo/计分、游戏结束判定。
  • 渲染层:HUD、虚线红线、预告球与预测落点、球体、粒子/光环/浮动文字/撒花。
  • 输入层:pointerdown/move/up 控制瞄准与投掷,坐标按画布缩放映射。

数据流

  • 页面加载 → preloadBadges 异步加载 9 张校徽入缓存 → 用户 pointer 移动预告球 → 松手投掷入物理世界 → Matter 60Hz 固定步长推进 → collisionStart 收集同等级接触对 → pendingMerges(60ms 延迟)→ doMerge(冻结旧球、移除、加权中心创建新球)→ 计分/解锁/特效/唤醒附近球 → 渲染循环。

目录结构

  • D:\integrate_sjtu\index.html(游戏本体)
  • D:\integrate_sjtu\PRD.md / ARCH.md / STATUS.md(三文件文档)
  • D:\integrate_sjtu\assets\1_西交.svg … 9_上交.svg(校徽资源,只读引用)

接口设计

  • drawBadge(ctx, level, x, y, r):缓存优先绘制校徽,兜底为特征色圆+白色缩写。
  • wakeNearbyBalls(cx, cy, radius):对距离 < radius 的球先置 sleepThreshold=0 再恢复 60(并强制唤醒)。
  • pickLevel():按当前 maxUnlocked 对应权重表随机取 1..N 级。
  • isMergeable(a, b):同等级、均为游戏球、未移除、非静态、距离 ≤ 半径和+10px。
  • doMerge(a, b):校验后冻结并移除旧球,在加权中心创建新等级球。
  • createWorld():重建引擎与左右墙/底部(摩擦 0.08/0.08/0.3,restitution 0)。

部署方案

  • 静态文件直接部署或本地打开;Matter.js 依赖 CDN,需联网加载。