3.6 KiB
3.6 KiB
抓大鹅运行态 3D 几何体实验 2026-05-02
1. 实验目标
本轮只验证抓大鹅运行态把可消除物从 2D 纯色几何图案切换为 3D 几何体后的可读性、点击手感和堆叠碰撞观感。
3D 表现层必须满足:
- 圆形图案映射为球体。
- 方形图案映射为方块。
- 三角形、菱形、五角星、六边形、胶囊、心形、梯形、平行四边形等现有视觉键映射为近似 3D 几何体。
- 物体在圆形空间内保持边界约束,并使用物理模拟产生轻微碰撞、堆叠、晃动效果。
- 点击、备选栏、消除、胜负判定仍使用当前后端权威快照与前端即时反馈协议,不把规则真相迁到前端。
2. 回退要求
这是一次可取消实验,不替换现有 2D 方案。
- 现有
Match3DVisualIcon、Match3DToken和托盘 2D 图案渲染代码必须保留。 - 新增 3D 表现层只作为运行态棋盘的可选渲染分支。
- 当浏览器不支持 WebGL、3D 依赖加载失败或实验开关关闭时,运行态必须自动回到现有 2D 图案表现。
- 托盘继续使用当前 2D 图标,便于玩家识别已选物品,也便于实验失败时快速回滚。
3. 工程落点
本轮只改前端表现层:
src/components/match3d-runtime/Match3DPhysicsBoard.tsx
src/components/match3d-runtime/Match3DRuntimeShell.tsx
src/components/match3d-runtime/Match3DRuntimeShell.test.tsx
src/components/match3d-runtime/match3dRuntimePresentation.ts
src/components/match3d-runtime/match3dVisualAssets.tsx
新增依赖:
three
cannon-es
@types/three
3D 棋盘默认启用;需要快速回到当前 2D demo 表现时,在运行态 URL 上追加任一参数:
?match3dRender=2d
?match3d3d=off
3D 分支只读取后端快照中的物品坐标、层级、可点击状态和视觉键。物理碰撞、轻微堆叠和几何体姿态只作为前端表现层,不改变消除规则、备选栏规则、胜负判定或最终权威快照。
match3dVisualAssets.tsx 保留 2D 纯色几何图案映射,运行态托盘继续使用该 2D 图标;match3dRuntimePresentation.ts 收口显示层坐标和状态兼容,避免异常旧坐标把 2D 或 3D 物体推到圆形边界外。
4. 验收口径
/match3d能打开并默认看到 3D 几何体棋盘。- 3D 几何体保持在圆形区域内,不被圆形边界裁切到不可点。
- 物体进入场景后有轻微物理碰撞和堆叠稳定过程。
- 点击 3D 物体后仍执行原有乐观入槽、后端确认、三消反馈和结算。
- 单元测试仍覆盖 2D 回退图案,确保回退路径没有被删除。
- 390px 移动端与桌面端均不能出现横向溢出,顶部状态、圆形棋盘和 7 格备选栏都要完整可见。
5. 锅型容器优化
2026-05-02 追加一轮 3D 表现优化,把运行态圆形空间明确解释为一口有固定深度和确定边界的锅。
编码口径:
- 相机改为俯视角,玩家优先看到锅内物体的平面分布、遮挡关系和向上堆叠。
- 3D 场景里的圆形区域拆成锅底、锅壁和锅沿三层视觉结构,锅壁有固定高度,锅沿明确标出边界。
- 物理世界使用同一个锅内半径作为水平活动边界,所有可消除物体的初始位置和运行中位置都必须被约束在圆形锅内。
- 物体受到重力后只允许在锅内碰撞、滑动、翻滚和向上堆叠,不能因为碰撞或初始坐标散落到圆形区域外。
- 该优化仍只属于前端 3D 表现层,不改变后端运行态坐标、点击权威判定、备选栏、消除和胜负规则。