بنقرة واحدة
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 边界必须落在视口内。