@playcraft/cli 0.0.40 → 0.0.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -3
- package/dist/atom-plan/validate-atom-plan.js +298 -0
- package/dist/cli-root-help.js +1 -1
- package/dist/commands/3d.js +363 -0
- package/dist/commands/create.js +337 -0
- package/dist/commands/image.js +1337 -43
- package/dist/commands/recommend.js +1 -1
- package/dist/commands/remix.js +213 -0
- package/dist/commands/skills.js +1379 -0
- package/dist/commands/tools-3d.js +473 -0
- package/dist/commands/tools-generation.js +452 -0
- package/dist/commands/tools-project.js +400 -0
- package/dist/commands/tools-research.js +37 -0
- package/dist/commands/tools-research.test.js +216 -0
- package/dist/commands/tools-utils.js +183 -0
- package/dist/commands/tools.js +7 -616
- package/dist/config.js +2 -0
- package/dist/index.js +19 -1
- package/dist/utils/version-checker.js +8 -11
- package/package.json +9 -3
- package/project-template/.claude/agents/designer.md +120 -0
- package/project-template/.claude/agents/developer.md +124 -0
- package/project-template/.claude/agents/pm.md +164 -0
- package/project-template/.claude/agents/refs/README.md +73 -0
- package/project-template/.claude/agents/refs/designer-art-style-catalog.md +533 -0
- package/project-template/.claude/agents/refs/designer-color-audio-recipes.md +153 -0
- package/project-template/.claude/agents/refs/designer-deliverable-spec.md +191 -0
- package/project-template/.claude/agents/refs/designer-dimension-axis.md +27 -0
- package/project-template/.claude/agents/refs/designer-handoff-v2-checklist.md +68 -0
- package/project-template/.claude/agents/refs/designer-master-composite-recipes.md +208 -0
- package/project-template/.claude/agents/refs/designer-style-exploration-flow.md +37 -0
- package/project-template/.claude/agents/refs/developer-dev-handoff.md +109 -0
- package/project-template/.claude/agents/refs/developer-impl-cookbook.md +134 -0
- package/project-template/.claude/agents/refs/developer-phase1-flow.md +136 -0
- package/project-template/.claude/agents/refs/pm-workflow-detail.md +551 -0
- package/project-template/.claude/agents/refs/reviewer-convergence-eval.md +130 -0
- package/project-template/.claude/agents/refs/reviewer-six-dimension-eval.md +6 -0
- package/project-template/.claude/agents/refs/ta-3d-flip-recipe.md +85 -0
- package/project-template/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
- package/project-template/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
- package/project-template/.claude/agents/refs/ta-image-generation-detail.md +356 -0
- package/project-template/.claude/agents/refs/ta-image-ops-reference.md +495 -0
- package/project-template/.claude/agents/refs/ta-pipeline-cookbook.md +1108 -0
- package/project-template/.claude/agents/refs/ta-tools-reference.md +111 -0
- package/project-template/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
- package/project-template/.claude/agents/reviewer.md +127 -0
- package/project-template/.claude/agents/technical-artist.md +122 -0
- package/project-template/.claude/hooks/README.md +44 -0
- package/project-template/.claude/hooks/validate-atom-plan.mjs +224 -0
- package/project-template/.claude/hooks/validate-workflow-stop.mjs +343 -0
- package/project-template/.claude/settings.json +36 -0
- package/project-template/.claude/settings.local.json +4 -0
- package/project-template/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
- package/project-template/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
- package/project-template/.claude/skills/playcraft-asset-state-sheet/SKILL.md +141 -0
- package/project-template/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
- package/project-template/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
- package/project-template/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
- package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +279 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +235 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
- package/project-template/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
- package/project-template/.claude/skills/playcraft-masking/SKILL.md +373 -0
- package/project-template/.claude/skills/playcraft-research/SKILL.md +212 -0
- package/project-template/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
- package/project-template/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
- package/project-template/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
- package/project-template/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
- package/project-template/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
- package/project-template/.claude/skills/playcraft-workflow/SKILL.md +485 -0
- package/project-template/.claude/skills/playwright-cli/SKILL.md +390 -0
- package/project-template/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
- package/project-template/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/project-template/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/project-template/.claude/skills/playwright-cli/references/running-code.md +240 -0
- package/project-template/.claude/skills/playwright-cli/references/session-management.md +226 -0
- package/project-template/.claude/skills/playwright-cli/references/spec-driven-testing.md +312 -0
- package/project-template/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/project-template/.claude/skills/playwright-cli/references/test-generation.md +138 -0
- package/project-template/.claude/skills/playwright-cli/references/tracing.md +142 -0
- package/project-template/.claude/skills/playwright-cli/references/video-recording.md +157 -0
- package/project-template/.cursor/hooks.json +17 -0
- package/project-template/.cursor/rules/playcraft-orchestrator.mdc +137 -0
- package/project-template/.cursor/rules/playcraft-subagent-boundary.mdc +18 -0
- package/project-template/CLAUDE.md +280 -0
- package/project-template/assets/audio/bgm/.gitkeep +0 -0
- package/project-template/assets/audio/sfx/.gitkeep +0 -0
- package/project-template/assets/bundles/.gitkeep +0 -0
- package/project-template/assets/images/bg/.gitkeep +0 -0
- package/project-template/assets/images/reference/.gitkeep +0 -0
- package/project-template/assets/images/storyboard/.gitkeep +0 -0
- package/project-template/assets/images/tiles/.gitkeep +0 -0
- package/project-template/assets/images/ui/.gitkeep +0 -0
- package/project-template/assets/images/vfx/.gitkeep +0 -0
- package/project-template/assets/models/.gitkeep +0 -0
- package/project-template/docs/team/agent-conduct.md +121 -0
- package/project-template/docs/team/agent-runtime-matrix.md +62 -0
- package/project-template/docs/team/atom-plan-format.md +105 -0
- package/project-template/docs/team/collaboration.md +297 -0
- package/project-template/docs/team/core-model.md +50 -0
- package/project-template/docs/team/platform-capabilities.md +15 -0
- package/project-template/docs/team/workflow-changelog.md +65 -0
- package/project-template/docs/team/workflow-consistency-checklist.md +140 -0
- package/project-template/game/config/.gitkeep +0 -0
- package/project-template/game/gameplay/.gitkeep +0 -0
- package/project-template/game/scenes/.gitkeep +0 -0
- package/project-template/logs/.gitkeep +0 -0
- package/project-template/ta-workspace/logs/.gitkeep +0 -0
- package/project-template/ta-workspace/scripts/.gitkeep +0 -0
- package/project-template/ta-workspace/tmp/.gitkeep +0 -0
- package/project-template/templates/atom-plan.template.json +26 -0
- package/project-template/templates/atom-plan.template.md +108 -0
- package/project-template/templates/design-brief.template.md +195 -0
- package/project-template/templates/design-lens-checklist.reference.md +117 -0
- package/project-template/templates/design-methodology.md +99 -0
- package/project-template/templates/designer-log.template.md +114 -0
- package/project-template/templates/developer-log.template.md +134 -0
- package/project-template/templates/five-axis-framework.md +186 -0
- package/project-template/templates/intent-clarifications.template.md +58 -0
- package/project-template/templates/layout-spec.template.md +146 -0
- package/project-template/templates/project-state.template.md +237 -0
- package/project-template/templates/review-report.template.md +91 -0
- package/project-template/templates/style-exploration.template.md +93 -0
- package/project-template/templates/ta-log.template.md +343 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playcraft-batch-pipeline
|
|
3
|
+
description: PlayCraft 批处理管线选型与语法指南。涵盖三种批处理方式的选型决策树(Node.js 脚本 / CLI batch / CLI pipeline)、playcraft image batch 的 steps 语法与已知限制、playcraft image pipeline 的 YAML 配置结构与 assemble 精灵图组装。实用配方见 refs 文件。
|
|
4
|
+
triggers: 批处理,batch,pipeline,批量操作,多文件处理,声明式管线,YAML配置,批量resize,批量转换,批量去背,assemble,精灵图组装,image batch,image pipeline,批量处理,parallel,skip-existing,断点续传
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PlayCraft 批处理管线指南
|
|
8
|
+
|
|
9
|
+
## 0. 三种批处理方式选型
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
需要批量处理多张图片?
|
|
13
|
+
│
|
|
14
|
+
├─ 涉及 AI 生成(generate-image)或复杂分支逻辑?
|
|
15
|
+
│ └─ → Node.js .mjs 脚本(ta-workspace/scripts/)
|
|
16
|
+
│ 参考:playcraft-image-generation Skill 的 reference/ 模板
|
|
17
|
+
│
|
|
18
|
+
├─ 纯本地图像处理(resize/convert/tint 等),需要并发加速?
|
|
19
|
+
│ └─ → playcraft image batch(本节 §1)
|
|
20
|
+
│
|
|
21
|
+
└─ 需要最终自动打包成精灵图,或用配置文件管理管线?
|
|
22
|
+
└─ → playcraft image pipeline(本节 §2)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**三种方式对比**:
|
|
26
|
+
|
|
27
|
+
| 特性 | Node.js 脚本 | image batch | image pipeline |
|
|
28
|
+
| -------------- | ------------ | ----------------- | ----------------------- |
|
|
29
|
+
| AI 生成 | 支持 | 不支持 | 不支持 |
|
|
30
|
+
| 并发控制 | 自定义 | `--parallel N` | 顺序 |
|
|
31
|
+
| 断点续传 | 自实现 | `--skip-existing` | 不支持 |
|
|
32
|
+
| 配置复用 | JS 文件 | 命令行 | YAML/JSON 文件 |
|
|
33
|
+
| 自动组装精灵图 | 自实现 | 不支持 | `assemble.sprite-sheet` |
|
|
34
|
+
| 学习成本 | 中 | 低 | 低 |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 1. playcraft image batch — 声明式多步批处理
|
|
39
|
+
|
|
40
|
+
对一个目录(或多个文件)中的所有图片,按顺序执行多个处理步骤。
|
|
41
|
+
|
|
42
|
+
### 基础用法
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
playcraft image batch \
|
|
46
|
+
--input-dir assets/images/raw/ \
|
|
47
|
+
--output-dir assets/images/processed/ \
|
|
48
|
+
--steps "resize --width 256 --height 256, tint --color #FFD700" \
|
|
49
|
+
--parallel 4 --skip-existing
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
| 参数 | 类型 | 说明 |
|
|
53
|
+
| -------------------- | ------ | ---------------------------------------------- |
|
|
54
|
+
| `--input-dir <dir>` | string | 输入目录(与 `--inputs` 二选一) |
|
|
55
|
+
| `--inputs <paths>` | string | 逗号分隔的文件列表(与 `--input-dir` 二选一) |
|
|
56
|
+
| `--glob <pattern>` | string | 文件匹配模式,默认 `*.png,*.jpg,*.jpeg,*.webp` |
|
|
57
|
+
| `--output-dir <dir>` | string | 输出目录(必填)**输出统一为 .png** |
|
|
58
|
+
| `--steps <pipeline>` | string | 处理步骤(必填,见下方语法) |
|
|
59
|
+
| `--parallel <N>` | number | 并发数,默认 4 |
|
|
60
|
+
| `--skip-existing` | flag | 跳过输出目录中已存在的文件(断点续传) |
|
|
61
|
+
|
|
62
|
+
### Steps 语法
|
|
63
|
+
|
|
64
|
+
`--steps` 接受逗号分隔的步骤列表,每步格式为 `子命令名 [参数...]`:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
--steps "resize --width 128 --height 128, grayscale, tint --color #4488FF"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 支持的步骤命令
|
|
71
|
+
|
|
72
|
+
| 可用命令 | 示例 |
|
|
73
|
+
| ------------------- | --------------------------------------------------------- |
|
|
74
|
+
| `resize` | `resize --width 128 --height 128` 或 `resize --scale 0.5` |
|
|
75
|
+
| `convert` | `convert --format webp --quality 85` |
|
|
76
|
+
| `grayscale` | `grayscale` |
|
|
77
|
+
| `blur` | `blur --sigma 5` |
|
|
78
|
+
| `tint` | `tint --color #FFD700` |
|
|
79
|
+
| `trim` | `trim --threshold 20` |
|
|
80
|
+
| `negate` | `negate` |
|
|
81
|
+
| `rotate` | `rotate --angle 90` |
|
|
82
|
+
| `flip` | `flip --direction horizontal` |
|
|
83
|
+
| `pad` | `pad --all 8` |
|
|
84
|
+
| `pixelate` | `pixelate --pixel-size 8` |
|
|
85
|
+
| `remove-background` | `remove-background --method floodfill --tolerance 40` |
|
|
86
|
+
|
|
87
|
+
> **已知限制**:`crop`、`overlay`、`sprite-split`、`sprite-sheet`、`animate`、`use-vfx`、`segment`、`decompose-layers` 不能在 `--steps` 中使用(`segment` / `decompose-layers` 走后端 API)。需要 `crop` 或分层的批量操作请用 for 循环或 Node.js 脚本。
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 2. playcraft image pipeline — YAML/JSON 声明式管线
|
|
92
|
+
|
|
93
|
+
比 `batch` 更强大:支持配置文件复用、可选自动组装精灵图。
|
|
94
|
+
|
|
95
|
+
### YAML 配置结构
|
|
96
|
+
|
|
97
|
+
```yaml
|
|
98
|
+
# ta-workspace/pipeline_config.yaml
|
|
99
|
+
input:
|
|
100
|
+
dir: assets/images/raw_tiles/
|
|
101
|
+
glob: "*.png"
|
|
102
|
+
|
|
103
|
+
steps:
|
|
104
|
+
- command: resize
|
|
105
|
+
width: 128
|
|
106
|
+
height: 128
|
|
107
|
+
- command: trim
|
|
108
|
+
threshold: 15
|
|
109
|
+
|
|
110
|
+
output:
|
|
111
|
+
dir: assets/images/tiles/
|
|
112
|
+
|
|
113
|
+
assemble: # 可选:处理完后自动组装精灵图
|
|
114
|
+
sprite-sheet:
|
|
115
|
+
output: assets/images/tiles_sprite.png
|
|
116
|
+
columns: 4
|
|
117
|
+
padding: 2
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
执行:`playcraft image pipeline --config ta-workspace/pipeline_config.yaml`(加 `--dry-run` 可预览步骤)
|
|
121
|
+
|
|
122
|
+
### assemble.sprite-sheet 说明
|
|
123
|
+
|
|
124
|
+
配置 `assemble.sprite-sheet` 后,pipeline 完成所有文件处理后,会自动将 `output.dir` 下的所有 `*.png` 合并为一张精灵图(同时生成 `.json` 元数据):
|
|
125
|
+
|
|
126
|
+
```yaml
|
|
127
|
+
assemble:
|
|
128
|
+
sprite-sheet:
|
|
129
|
+
output: assets/images/sprite_atlas.png
|
|
130
|
+
columns: 4 # 每行帧数
|
|
131
|
+
padding: 2 # 帧间距(像素)
|
|
132
|
+
sort: name # 排序方式:name(默认)/ modified / none
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 3. 何时用哪种方式(完整决策树)
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
需要批量处理?
|
|
141
|
+
│
|
|
142
|
+
├─ 需要 AI 生成(generate-image/generate-3d)?
|
|
143
|
+
│ └─ 用 Node.js 脚本(ta-workspace/scripts/*.mjs)
|
|
144
|
+
│ 参考:playcraft-image-generation SKILL 的 reference/gen-batch.template.mjs
|
|
145
|
+
│
|
|
146
|
+
├─ 只需要本地图像变换(resize/tint/trim/convert/去背等)?
|
|
147
|
+
│ │
|
|
148
|
+
│ ├─ 需要最终合并成精灵图?
|
|
149
|
+
│ │ └─ 用 pipeline(YAML/JSON 配置 + assemble)
|
|
150
|
+
│ │
|
|
151
|
+
│ ├─ 需要并发加速?
|
|
152
|
+
│ │ └─ 用 batch(--parallel N)
|
|
153
|
+
│ │
|
|
154
|
+
│ ├─ 需要断点续传?
|
|
155
|
+
│ │ └─ 用 batch(--skip-existing)
|
|
156
|
+
│ │
|
|
157
|
+
│ └─ 配置需要复用/版本管理?
|
|
158
|
+
│ └─ 用 pipeline(YAML 文件)
|
|
159
|
+
│
|
|
160
|
+
└─ 需要 crop 作为批处理步骤?
|
|
161
|
+
└─ 用 for 循环(batch 不支持 crop):
|
|
162
|
+
for f in dir/*.png; do
|
|
163
|
+
playcraft image crop --input "$f" --output "out/$(basename $f)" \
|
|
164
|
+
--x 0 --y 0 --width 128 --height 128
|
|
165
|
+
done
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 4. 已知限制汇总
|
|
171
|
+
|
|
172
|
+
| 限制 | 影响 | 绕过方法 |
|
|
173
|
+
| -------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------- |
|
|
174
|
+
| `batch` 的 `--steps` 不支持 `crop` | 无法在批处理管线中裁切 | 改用 for 循环或 Node.js 脚本 |
|
|
175
|
+
| `batch` 不支持 `overlay`(需要两个输入) | 无法批量合成 | 改用 Node.js 脚本 |
|
|
176
|
+
| `pipeline` 不支持并发(顺序处理) | 大批量时较慢 | 改用 `batch --parallel` |
|
|
177
|
+
| `batch` 输出统一为 `.png`(忽略 convert 步骤后缀) | 即使 steps 中有 `convert --format webp`,文件名仍是 `.png` | pipeline 中用 convert 步骤 + 修改 output 路径 |
|
|
178
|
+
| `remove-background --method ai` 在 batch 中不支持 | 批量 AI 去背报错 | 改用 floodfill,或用 Node.js 脚本 |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 5. 配方参考
|
|
183
|
+
|
|
184
|
+
完整的 batch/pipeline 实用配方(批量 resize、批量去背、主题色变体、精灵图组装管线等)见 `refs/ta-batch-pipeline-recipes.md`。
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playcraft-build-optimizer
|
|
3
|
+
description: 可玩广告构建优化与平台合规验证完整指南。涵盖 playcraft build 全部优化参数(图片压缩/WebP转换/模型压缩/JS混淆)、正确的优化执行顺序(避免多次有损压缩)、各平台合规验证清单(文件大小/外部请求/CTA API/音频自动播放)、Base64 膨胀系数计算。供未来 Optimizer Agent 使用。
|
|
4
|
+
triggers: 构建优化,build optimizer,压缩,compress,WebP,pngquant,文件大小,file size,合规验证,compliance,CTA API,FbPlayableAd,ExitApi,外部请求,external request,体积,5MB限制,build参数,optimize,minify
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 可玩广告构建优化与合规验证指南
|
|
8
|
+
|
|
9
|
+
> **使用时机**:在 Developer Phase 2(集成构建)完成、产出 index.html 之后执行。优化是最后一步,不在生产阶段执行。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 0. 关键数字速查
|
|
14
|
+
|
|
15
|
+
| 约束项 | 数值 | 说明 |
|
|
16
|
+
| ---------------- | --------------------------- | ---------------------------------------- |
|
|
17
|
+
| 最终文件大小上限 | 5 MB | Meta/Google/AppLovin/IronSource 统一标准 |
|
|
18
|
+
| 原始资产建议上限 | 3.75 MB | Base64 编码后膨胀 ×1.33,需提前预留空间 |
|
|
19
|
+
| 触控目标最小尺寸 | 48×48 px | 防止误触,符合 WCAG 可访问性标准 |
|
|
20
|
+
| CTA 对比度下限 | 4.5:1 | WCAG AA 标准(CTA 按钮与背景) |
|
|
21
|
+
| Meta CTA API | `FbPlayableAd.onCTAClick()` | 必须实现,否则审核拒绝 |
|
|
22
|
+
| Google CTA API | `ExitApi.exit()` | 必须实现,否则审核拒绝 |
|
|
23
|
+
| 音频自动播放 | 禁止 | 必须等用户交互后才能播放 |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 1. 合规验证清单(构建后必须执行)
|
|
28
|
+
|
|
29
|
+
### 1.1 文件大小验证
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 检查最终输出文件大小
|
|
33
|
+
playcraft image info --input dist/index.html --json # 不适用,用 shell
|
|
34
|
+
|
|
35
|
+
# Shell 方法:检查文件大小(字节)
|
|
36
|
+
du -sh dist/index.html
|
|
37
|
+
ls -lh dist/index.html
|
|
38
|
+
|
|
39
|
+
# 计算:若当前原始资产总大小为 X MB
|
|
40
|
+
# 预计最终 HTML 大小 ≈ X × 1.33(Base64 膨胀)
|
|
41
|
+
# 若预计超过 5 MB,需要压缩
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Base64 膨胀系数说明**:`playcraft build` 会将所有资产(图片、音频、模型)内嵌到单个 HTML 文件中,编码为 Base64。Base64 编码会使数据体积增加约 33%。
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
原始资产总大小 × 1.33 ≈ 最终 HTML 文件大小
|
|
48
|
+
→ 要保证最终 < 5 MB,原始资产须 < 3.75 MB
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 1.2 外部请求检查
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# 在项目代码中搜索外部请求(构建前检查)
|
|
55
|
+
grep -r "fetch(" game/ --include="*.js" --include="*.ts"
|
|
56
|
+
grep -r "XMLHttpRequest" game/ --include="*.js" --include="*.ts"
|
|
57
|
+
grep -r "https://" game/ --include="*.js" --include="*.ts"
|
|
58
|
+
grep -r "http://" game/ --include="*.js" --include="*.ts"
|
|
59
|
+
grep -r "<script src=" game/ --include="*.html"
|
|
60
|
+
grep -r "<link href=" game/ --include="*.html"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**零外部请求要求**:最终 HTML 不得包含任何外部 URL(CDN、API、图片链接等)。所有资源必须内嵌。
|
|
64
|
+
|
|
65
|
+
### 1.3 CTA API 实现验证
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 检查 Meta CTA API 实现
|
|
69
|
+
grep -r "FbPlayableAd.onCTAClick" game/ --include="*.js" --include="*.ts"
|
|
70
|
+
# 若无匹配 → CTA 功能不完整,需要 Developer 补充
|
|
71
|
+
|
|
72
|
+
# 检查 Google CTA API 实现
|
|
73
|
+
grep -r "ExitApi.exit" game/ --include="*.js" --include="*.ts"
|
|
74
|
+
# 若无匹配 → Google Ads 版本缺少 CTA,需要 Developer 补充
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**CTA API 标准实现**(供 Developer 参考):
|
|
78
|
+
|
|
79
|
+
```javascript
|
|
80
|
+
// 多平台兼容 CTA 处理
|
|
81
|
+
function handleCTAClick() {
|
|
82
|
+
// Meta / Facebook
|
|
83
|
+
if (typeof FbPlayableAd !== "undefined") {
|
|
84
|
+
FbPlayableAd.onCTAClick();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
// Google Ads / AdMob
|
|
88
|
+
if (typeof ExitApi !== "undefined") {
|
|
89
|
+
ExitApi.exit();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// AppLovin / IronSource / 其他
|
|
93
|
+
if (typeof mraid !== "undefined") {
|
|
94
|
+
mraid.open(STORE_URL);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Fallback
|
|
98
|
+
window.open(STORE_URL, "_blank");
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 1.4 音频自动播放检查
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# 检查是否有自动播放的音频
|
|
106
|
+
grep -r "autoplay" game/ --include="*.js" --include="*.ts" --include="*.html"
|
|
107
|
+
grep -r "\.play()" game/ --include="*.js" --include="*.ts"
|
|
108
|
+
# 所有 .play() 调用必须在用户交互事件(click/touchstart)的回调内
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 2. playcraft build 优化参数
|
|
114
|
+
|
|
115
|
+
### 完整优化构建命令
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# 标准优化构建(Meta 平台)
|
|
119
|
+
playcraft build . \
|
|
120
|
+
--platform facebook \
|
|
121
|
+
--compress-images \
|
|
122
|
+
--image-quality 85 \
|
|
123
|
+
--convert-webp \
|
|
124
|
+
--js-minify \
|
|
125
|
+
--css-minify \
|
|
126
|
+
--output dist/
|
|
127
|
+
|
|
128
|
+
# 带 3D 模型压缩的构建
|
|
129
|
+
playcraft build . \
|
|
130
|
+
--platform facebook \
|
|
131
|
+
--compress-images \
|
|
132
|
+
--image-quality 80 \
|
|
133
|
+
--convert-webp \
|
|
134
|
+
--compress-models \
|
|
135
|
+
--model-compression draco \
|
|
136
|
+
--js-minify \
|
|
137
|
+
--output dist/
|
|
138
|
+
|
|
139
|
+
# 分析体积占用(不构建,只分析)
|
|
140
|
+
playcraft build . \
|
|
141
|
+
--platform facebook \
|
|
142
|
+
--analyze
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 图片优化参数
|
|
146
|
+
|
|
147
|
+
| 参数 | 说明 | 默认 |
|
|
148
|
+
| ------------------------- | ------------------------- | ---------- |
|
|
149
|
+
| `--compress-images` | 启用图片压缩(pngquant) | 需显式开启 |
|
|
150
|
+
| `--image-quality <0-100>` | 压缩质量(底层 pngquant) | 85 |
|
|
151
|
+
| `--convert-webp` | 将 PNG/JPG 转换为 WebP | 默认开启 |
|
|
152
|
+
| `--no-convert-webp` | 禁用 WebP 转换 | — |
|
|
153
|
+
|
|
154
|
+
**pngquant 说明**:`--compress-images` 使用 `imagemin-pngquant` 进行 PNG 调色板量化,可减少 30-50% 体积,无明显视觉损失(对像素艺术效果更好)。
|
|
155
|
+
|
|
156
|
+
**WebP 说明**:`--convert-webp` 将图片转换为 WebP 格式,比 PNG 减少 60-75%,比 JPG 减少 25-34%,且支持透明通道。现代移动端浏览器均支持。
|
|
157
|
+
|
|
158
|
+
### 模型优化参数
|
|
159
|
+
|
|
160
|
+
| 参数 | 说明 |
|
|
161
|
+
| ----------------------------- | ------------------------------------- |
|
|
162
|
+
| `--compress-models` | 启用 3D 模型压缩 |
|
|
163
|
+
| `--model-compression draco` | 使用 Draco 几何压缩(通用,广泛支持) |
|
|
164
|
+
| `--model-compression meshopt` | 使用 MeshOptimizer(更高压缩比) |
|
|
165
|
+
|
|
166
|
+
### JS/CSS 优化参数
|
|
167
|
+
|
|
168
|
+
| 参数 | 说明 |
|
|
169
|
+
| -------------- | ----------------------------- |
|
|
170
|
+
| `--js-minify` | 启用 JS 压缩(Terser + 混淆) |
|
|
171
|
+
| `--css-minify` | 启用 CSS 压缩 |
|
|
172
|
+
|
|
173
|
+
### 多平台批量构建
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# 同时构建多个平台版本
|
|
177
|
+
playcraft build-all . \
|
|
178
|
+
--platforms facebook,google,applovin \
|
|
179
|
+
--compress-images \
|
|
180
|
+
--image-quality 85 \
|
|
181
|
+
--convert-webp \
|
|
182
|
+
--js-minify \
|
|
183
|
+
--output dist/
|
|
184
|
+
|
|
185
|
+
# 或按平台组
|
|
186
|
+
playcraft build-all . \
|
|
187
|
+
--group mainstream \ # 主流平台
|
|
188
|
+
--compress-images \
|
|
189
|
+
--convert-webp
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## 3. 正确的优化执行顺序
|
|
195
|
+
|
|
196
|
+
**关键原则**:避免对同一文件多次执行有损压缩(每次有损压缩都会叠加质量损失)。
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
正确顺序:
|
|
200
|
+
1. 检查原始资产总大小
|
|
201
|
+
↓
|
|
202
|
+
2. 3D 模型压缩(draco/meshopt)— 无损几何优化
|
|
203
|
+
↓
|
|
204
|
+
3. playcraft build --convert-webp — PNG→WebP(一次有损转换)
|
|
205
|
+
↓
|
|
206
|
+
4. playcraft build --compress-images --image-quality 85 — pngquant(针对非 WebP 的 PNG)
|
|
207
|
+
↓
|
|
208
|
+
5. playcraft build --js-minify --css-minify — 代码压缩
|
|
209
|
+
↓
|
|
210
|
+
6. 检查最终文件大小(必须 < 5 MB)
|
|
211
|
+
↓
|
|
212
|
+
7. 合规验证清单(§1)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**禁止行为**:
|
|
216
|
+
|
|
217
|
+
- 不要先用 `playcraft image convert --format webp` 手动转换,再用 `--convert-webp` 构建(双重转换)
|
|
218
|
+
- 不要对同一图片多次运行 `--compress-images`(每次都会损失质量)
|
|
219
|
+
- 生产阶段(Designer/TA)产出应保持 PNG 格式,优化阶段统一转换
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 4. 单文件优化(构建后问题文件处理)
|
|
224
|
+
|
|
225
|
+
当某个文件体积异常大时,可单独优化:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# 查看问题文件大小
|
|
229
|
+
playcraft image info --input assets/images/bg/background.png --json
|
|
230
|
+
|
|
231
|
+
# 单文件转 WebP(有损,质量 85)
|
|
232
|
+
playcraft image convert \
|
|
233
|
+
--input assets/images/bg/background.png \
|
|
234
|
+
--output assets/images/bg/background.webp \
|
|
235
|
+
--format webp \
|
|
236
|
+
--quality 85
|
|
237
|
+
|
|
238
|
+
# 单文件转 WebP(无损,适合 UI 元素和像素艺术)
|
|
239
|
+
playcraft image convert \
|
|
240
|
+
--input assets/images/ui/button.png \
|
|
241
|
+
--output assets/images/ui/button.webp \
|
|
242
|
+
--format webp \
|
|
243
|
+
--lossless
|
|
244
|
+
|
|
245
|
+
# 音频压缩(降低比特率)
|
|
246
|
+
playcraft audio compress \
|
|
247
|
+
--input assets/audio/bgm/main_theme.mp3 \
|
|
248
|
+
--output assets/audio/bgm/main_theme_compressed.mp3 \
|
|
249
|
+
--bitrate 96k \
|
|
250
|
+
--mono
|
|
251
|
+
|
|
252
|
+
# 3D 模型优化
|
|
253
|
+
playcraft 3d optimize \
|
|
254
|
+
--input assets/models/character.glb \
|
|
255
|
+
--output assets/models/character_optimized.glb \
|
|
256
|
+
--texture-size 512
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 5. 优化报告格式
|
|
262
|
+
|
|
263
|
+
完成优化后,写入 `logs/optimizer-log.md`:
|
|
264
|
+
|
|
265
|
+
```markdown
|
|
266
|
+
# Optimizer Log
|
|
267
|
+
|
|
268
|
+
## 构建信息
|
|
269
|
+
|
|
270
|
+
- 平台:{{platform}}
|
|
271
|
+
- 构建时间:{{timestamp}}
|
|
272
|
+
- 最终文件大小:{{size_mb}} MB(限制:5 MB)
|
|
273
|
+
- 构建状态:{{pass/fail}}
|
|
274
|
+
|
|
275
|
+
## 资产优化摘要
|
|
276
|
+
|
|
277
|
+
| 资产类型 | 优化前总大小 | 优化后总大小 | 压缩率 |
|
|
278
|
+
| ------------------ | ------------- | ------------ | ---------- |
|
|
279
|
+
| 图片(PNG → WebP) | {{before}} MB | {{after}} MB | {{ratio}}% |
|
|
280
|
+
| 3D 模型 | {{before}} MB | {{after}} MB | {{ratio}}% |
|
|
281
|
+
| 音频 | {{before}} MB | {{after}} MB | {{ratio}}% |
|
|
282
|
+
| JS/CSS | {{before}} KB | {{after}} KB | {{ratio}}% |
|
|
283
|
+
|
|
284
|
+
## 合规验证结果
|
|
285
|
+
|
|
286
|
+
- [ ] 文件大小 ≤ 5 MB
|
|
287
|
+
- [ ] 零外部请求
|
|
288
|
+
- [ ] Meta CTA API 实现(FbPlayableAd.onCTAClick)
|
|
289
|
+
- [ ] Google CTA API 实现(ExitApi.exit)
|
|
290
|
+
- [ ] 音频无自动播放
|
|
291
|
+
|
|
292
|
+
## 问题与建议
|
|
293
|
+
|
|
294
|
+
{{如有超限或合规问题,在此列出并给出修复建议}}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## 6. 常见审核被拒原因速查
|
|
300
|
+
|
|
301
|
+
| 被拒原因 | 占比 | 检查方法 | 修复方法 |
|
|
302
|
+
| ----------------- | ---- | ------------------------ | ------------------------------------------------------- |
|
|
303
|
+
| 文件大小超过 5 MB | 45% | `ls -lh dist/index.html` | `--compress-images --convert-webp` 或降低 image-quality |
|
|
304
|
+
| 包含外部请求 | 30% | `grep -r "https://"` | Developer 将外部资源内嵌 |
|
|
305
|
+
| CTA 未实现 | 15% | `grep "FbPlayableAd"` | Developer 添加平台 CTA API |
|
|
306
|
+
| 音频自动播放 | 10% | `grep "autoplay"` | Developer 改为用户交互触发 |
|