一键导入
adapt-game-mobile
BoardGame 单游戏移动端适配入口。用于 mobileProfile、横竖屏、mobile shell、hover/拖拽替代、游戏层手机/平板验收;不重写原生 App 或框架层。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
BoardGame 单游戏移动端适配入口。用于 mobileProfile、横竖屏、mobile shell、hover/拖拽替代、游戏层手机/平板验收;不重写原生 App 或框架层。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
BoardGame 项目内参考图生成 Three.js 程序化模型流程。用于 img2threejs、图生模型、参考图重建、Three.js 游戏资产原型、书本/棋盘/卡牌/道具 3D 模型任务;在动手写模型前先拆参考图结构并建立“参考图区域到模型部件/材质”的追踪表,禁止把参考图当整面贴图贴皮,也禁止脱离参考图生成泛主题模型。
BoardGame 线上反馈批量收口流程。用于未关闭反馈、排重、真假 bug 分诊、并行修复、状态回写、关闭误报/重复反馈。
BoardGame 规则 bug 修复流程。用于卡牌、技能、Token、状态、阶段、伤害、资源、升级/基础差异、结算顺序和审计漏审。
BoardGame Git 操作入口。用于提交、推送、同步主分支、pre-push 阻塞、PR、worktree、fork、merge 等协作场景。
BoardGame 新游戏创建或资源/data intake 流程。用于新增游戏、只给图片/位置先开工;按现有游戏模式分阶段推进并验收。
BoardGame 截图交付流程。用于打开图、给我看图、看截图、图呢、端到端截图;最终验收图默认走图片预览站。
| name | adapt-game-mobile |
| description | BoardGame 单游戏移动端适配入口。用于 mobileProfile、横竖屏、mobile shell、hover/拖拽替代、游戏层手机/平板验收;不重写原生 App 或框架层。 |
PC 版是权威布局,移动端只能在不影响 PC 的前提下做条件化适配。手机横屏尽量可用,不是强行把所有游戏都压成手机竖屏。React + Vite + UI Engine Framework,不重写第二套 MobileBoard。App WebView、小程序 web-view 只是分发容器,不是移动端适配方案本身。PC 对照分辨率固定为 1920x1080。2340x1080(13:6)。2340x1080,也必须保持同样 13:6 宽高比;推荐使用仍落在移动断点内的 936x432。PC + 手机横屏 两档,不强制补平板横屏。设计画布尺寸 + 壳层统一等比缩放。scale = min(availableWidth / designWidth, availableHeight / designHeight)。vh / vw 不能作为固定构图主单位:不得用“横屏 vh、竖屏 vw”替代壳层统一缩放去重算卡牌、棋盘、HUD 或操作轨。px 在主体画布内只表示设计坐标,不表示最终显示像素;最终显示尺寸必须由壳层缩放、容器约束或同等适配层统一承接。vw / vh 只允许用于局部辅助:安全区、壳层可用高度、装饰偏移、非关键视觉细节;一旦影响主体画布、主按钮、主字号、手牌轨道、中央牌区或 HUD 尺度,就视为错误方案。board-shell / 固定牌桌类游戏,顶栏、分数、阶段提示、手牌、中央牌区、主按钮、主操作区都默认属于同一张 PC 牌桌构图;移动端不得把这些区域拆开另算坐标、另排一套按钮轨道或另缩一套字号。right / bottom、手牌偏移、顶栏宽度这类定位关系,只能在 PC 设计坐标系内定义,再交给壳层统一缩放;不得在手机媒体查询里把按钮改成新的右下角浮动按钮、底部 action rail 或独立操作区,除非用户明确要求新移动 UI。PC 版当前实现已经达标。PC 达标 不是指“能打开页面”,而是至少满足:
PC 端还存在明确缺口,本轮默认动作就是继续收 PC,不得提前展开移动端压缩、断点重排、横屏特化或触控补丁。PC 是否已达标本轮是否因此启动了移动端适配点击查看 / 点击放大 / 点击展开 静默改成 仅长按、仅 hover 或 仅额外按钮。clamp(...)、统一缩放桌面按钮、压缩桌面主面板。board-shell / live 牌桌,移动条件覆盖的默认职责是修安全区、触控入口、无遮挡和壳层缩放参数;不得借移动端条件覆盖创造一套和 PC 不同的主 UI 布局。窄视口:以 mobileSupport.ts 中的 1023px 断点为准。manifest / mobile shell:用于页面级结构切换。粗指针 / 触控:只用于 hover 替代入口显隐,不可单独作为压缩 PC 尺寸的依据。(pointer: coarse) 就缩小桌面 UI。min-width、min-height、额外 padding 等规则来“顺带解决触控”。主体画布;移动端适配时必须优先保持等比缩放。width / height、横纵向比例、格子宽高或背景图比例,造成非等比拉伸、压扁、拉长。scale / translate / pan / 裁切 / 留白 / 局部滚动 / HUD 重排 解决视口容纳问题。重排:先区分它是不是固定牌桌的一部分。顶栏、分数、阶段提示、手牌、主按钮、中央牌区、主操作区属于同一固定构图时,默认跟随主体画布等比缩放,不能重排成另一套手机布局。coarse pointer 误当布局条件、把桌面 token 全局替换成更小值。docs/mobile-adaptation.mdopenspec/specs/game-registry/spec.mddocs/ai-rules/ui-ux.mddocs/ai-rules/engine-systems.md如需补充理解当前设计背景,再读:
openspec/changes/add-pc-first-mobile-adaptation-framework/design.mdopenspec/changes/add-pc-first-mobile-adaptation-framework/specs/mobile-support-framework/spec.md按需阅读 references/:
references/manifest-fields.mdreferences/checklist.mdreferences/dicethrone-pilot.md如果用户这次要的是提案、spec、proposal,而不是直接接入,先走 OpenSpec 流程。
长按看大图,优先复用 useLongPressAction.ts。点击查看详情 或 点击进入放大层。长按 默认是新增的触控 fallback,不是替换既有 点击 语义;如果原本已经存在 点击查看 / 点击放大 / 点击展开,移动端适配后默认仍要保留。coarse pointer、触控 hook、inspect 手势只能决定“补什么移动端入口”,不能单独作为“取消原 click 行为”的依据;除非用户明确要求重编排交互。点击选中 -> 点击目标 -> 点击确认 的回退路径。PC 优先 + 方向跟随 manifest + 通用 shell 优先。MobileBoard.tsx,不重写第二套移动端 UI。React Native、Flutter 或原生小程序重写。PC 主态真图;本项目默认使用 1920x1080 作为桌面对照基线。先读:
src/games/<gameId>/manifest.tssrc/games/<gameId>/Board.tsxsrc/games/<gameId>/ui/如果用户反馈的是“移动端所有按钮都肥了 / 都缩了 / 多个区域一起异常”,先补读:
src/index.css优先用 rg 搜这些风险点:
rg -n "hover|onMouse|mouseenter|mouseleave|drag|draggable|pointer|tooltip|sidebar|drawer|panel|absolute|fixed|clamp" src/games/<gameId>
如果怀疑是全局样式污染,再搜:
rg -n "@media|button|min-width|min-height|padding|coarse|hover|clamp" src/index.css src/components src/games/<gameId>
至少记录这些问题:
hover 依赖:信息、预览、状态说明是否只能悬停查看。drag 依赖:关键路径是否只能靠拖拽完成。固定尺寸:是否把桌面尺寸直接压缩到了所有视口。主体画布比例:棋盘 / 地图 / 卡面 / 战区背景是否仍保持等比。常驻侧栏:是否在手机横屏下挡住主战区。信息密度:是否要求用户先缩放再操作。全局样式污染:是否由 src/index.css、共享按钮样式、全局媒体查询或 reset 把多个区域一起改胖 / 改瘦。命中区与视觉混淆:是否把 touch target 要求直接写成了一整类交互元素的可见尺寸变化。根因定位:是否已经定位到具体选择器、共享组件、媒体查询或条件判断,而不是只停留在“看起来变胖 / 变小”。每个问题必须归类为:
framework:应沉到通用移动壳或公共 hook。game:需要游戏层声明或轻量修正。blocked:当前框架能力不足,必须先补框架层。不要自创字段名。只使用已批准的字段和值,详见 references/manifest-fields.md。
复杂桌游默认推荐:
mobileProfile: 'landscape-adapted'
preferredOrientation: 'landscape'
mobileLayoutPreset: 'board-shell'
shellTargets: ['pwa']
preferredOrientation 一致;landscape 游戏用横屏作为主验收,portrait 游戏用竖屏作为主验收。shellTargets 扩到 app-webview 或 mini-program-webview。PC 门禁已通过;若未通过,只能回到桌面端继续收口。src/index.css、共享按钮组件和全局媒体查询,再决定是否真的需要改游戏组件 token。board-shell 统一缩放,优先删除或收敛游戏内部移动横屏特化 CSS;不要在 Board 内再写一套顶栏、手牌、分数、主按钮的手机坐标。1023px 视口判断或 shell 条件启用,不能全局覆盖。mobileLayoutPreset: 'board-shell' 的游戏,全屏设置面板、选人/选派系面板、结算面板等如果在 PC 上已有明确布局,移动端主效果默认必须与 PC 保持同构。preferredOrientation 方向下,优先采用整面板等比缩放,让移动端呈现 PC 布局的缩小版;不要先改成另一套单栏手机稿,再把主操作藏到滚动末端。通常只在这些点上写游戏层代码:
如果某个例外未来大概率会被多个游戏复用,优先回推到框架层。
test-results/evidence-screenshots/_shared/ 的显式截图,再逐张人工阅读截图内容;只看断言、日志、DOM、locator、控制台输出,一律不算验收完成。display: none、移除节点、覆盖样式、跳过浮层”的截图都不能作为主状态证据;这类截图默认判定为无效证据。按 references/checklist.md 验收。最低要求:
board-shell 全屏面板,主方向下主要布局结构不变,主操作首屏可见,信息层级与 PC 一致。点击、新增的 长按、hover 替代入口分别是否仍符合预期;禁止只验布局,不验交互退化。test-results/evidence-screenshots/_shared/ 中的显式截图,逐张阅读;没有逐张看图,就视为没有完成移动端验收。PC 主态参考图,再逐张对照判断。1920x1080:用户未另行指定时,移动端对照截图一律使用 1920x1080 的桌面主态,不再混用 1440x900、1600x900 等非项目基线分辨率。16:9 基线:用户未另行指定时,手机横屏证据与对照默认使用 16:9 视口;禁止再用 812x375 这类超宽横屏把“画面关系不一致”误当成产品问题。board-shell 游戏,“和 PC 看起来差不多”优先解释为同一构图等比缩放;不得把主按钮搬到新 rail、把手牌另缩一套、把顶栏另排一套后再声称只是移动端让位。看图验收顺序默认如下:
PC 主态参考图,确认权威布局长什么样;本项目默认该图来自 1920x1080。test-results/evidence-screenshots/_shared/ 里的手机/平板主状态图,逐张和 PC 对照“整体比例、锚点、遮挡、主次关系”。PC 比还差什么、是否还有肉眼可见问题。涉及 UI / 交互修改时,验收必须同时覆盖:
PC 视口人工对比:确认桌面布局没有被移动端改动带歪。H5 移动视口 E2E:至少覆盖 1 个 manifest 主方向手机视口,再按风险补 1 个同方向补充视口(例如平板横屏或更小手机竖屏)。如已改动 UI,则这轮 E2E 是强制收口项;不能只做人工检查。
执行这个 skill 时,最终至少输出:
WebView 当成“自动获得移动端支持”。web-view 当成第一个落地方向。min-width / min-height / padding 来放大视觉尺寸。coarse pointer 分支里静默吞掉 onClick / inspect / expand 的原有兜底。transform: scale(calc(100vw / 1280))。scale() 需要 Number;calc(100vw / 1280) 是长度值,浏览器会把 transform 退化为 none。transform: scale(calc(100vw / 1280px)),或先定义变量后使用 scale(var(--mobile-board-shell-scale))。[data-game-page... ] .mobile-board-shell,不要默认写 > .mobile-board-shell。MatchRoom / LocalMatchRoom / TestMatchRoom 层级不同,直系子选择器容易漏命中。h-full,让高度跟随外层 shell。h-dvh / 100dvh 双重锁高。1280px,复杂游戏允许按 data-game-id 覆盖(例如 DiceThrone 的 940px)。documentElement/body/#root 满足 scrollWidth <= innerWidth + 1。.mobile-board-shell 的 left/right 边界必须落在视口内。