- balance.js: ARENA={w:1560,h:2960} 有界竞技场(中心对称原点)
- sim.js: 玩家走位 clamp 到场内(边距含岩壁内沿,贴边不站黑墙/不出屏)
- render.js: 镜头 clampCam + drawPlayer 解耦屏心 + drawGround 一档接整幅背景图(二档视差瓦片兜底)+ 四边自然暗角 + 背景降颗粒
- art.js: 登记 bg-map1-arena-01 + 后台拉起预载 + tiles 降懒载(不增首屏网络字节)
- assets/bg/bg-map1-arena-01.jpg: 矿彩国风裂谷原整图(1560x2960,AI 草图创始人审)
- 墙角死角作为有界竞技场设计保留;⑧win 重跑留下检查点
233 lines
7.2 KiB
JSON
233 lines
7.2 KiB
JSON
{
|
|
"checkpoint": "round-12 微调 3 个 CONCERNS(clamp 边距→岩壁内沿 / 四边自然暗角 / 背景降颗粒)+ CDP 复核",
|
|
"utc": "2026-07-25T07:59:09.540Z",
|
|
"machine": "lili-mac.local(开发机,非 mini-desktop)",
|
|
"node": "v22.22.3",
|
|
"url": "http://127.0.0.1:4518/?engine=stub&mode=evidence&seed=777",
|
|
"dpr": 2,
|
|
"viewport": {
|
|
"w": 390,
|
|
"h": 844
|
|
},
|
|
"arena": {
|
|
"w": 1560,
|
|
"h": 2960
|
|
},
|
|
"clampMargin": "player.r(12)+ARENA_WALL_INSET(84)=96",
|
|
"clampX": 684,
|
|
"clampY": 1384,
|
|
"microadjust": {
|
|
"c12": "sim.js clamp 边距 player.r→player.r+84=96,玩家贴边停在岩壁内沿,不站黑墙/不出屏",
|
|
"c3a": "render.js drawArenaBounds 纯黑硬带 rgba(5,3,1,0.85)→四边自然暗角 rgba(16,11,6,·) 峰值 0.5、外半段集中渐透",
|
|
"c3b": "render.js drawGround 一档 drawBg 前 imageSmoothingEnabled=true + quality=high,缓解上采样+DPR2 颗粒"
|
|
},
|
|
"collector": "/tmp/arena-e2e-r12.mjs(临时脚本,置 /tmp 不入仓)",
|
|
"shots": [
|
|
{
|
|
"name": "01-arena-center-panorama.png",
|
|
"desc": "全景:玩家场心(0,0),镜头居中,竞技场整幅背景中心区",
|
|
"sha256": "8d3f74d92ff0161167ad2d2e5dc51d41c50024028001edd4bfd5e0082b943f21",
|
|
"bytes": 1717505,
|
|
"utc": "2026-07-25T07:59:15.507Z",
|
|
"phase": "play",
|
|
"pos": {
|
|
"x": 0,
|
|
"y": 0
|
|
},
|
|
"timeS": 1.6,
|
|
"score": 0,
|
|
"enemies": 1,
|
|
"expectedScreen": {
|
|
"camX": -195,
|
|
"camY": -422,
|
|
"sx": 195,
|
|
"sy": 422
|
|
},
|
|
"brightness": {
|
|
"ok": true,
|
|
"width": 780,
|
|
"height": 1688,
|
|
"bright": 27467,
|
|
"total": 47190,
|
|
"ratio": 0.582
|
|
}
|
|
},
|
|
{
|
|
"name": "02-arena-edge-right.png",
|
|
"desc": "右边缘:玩家贴右界(x≈684,岩壁内沿),应停在暗角内沿清亮区、不站黑墙",
|
|
"sha256": "a3ca2290e0da3056a38a89f2584b059b381af97cdfa0a367f9b33ea1f97c6c12",
|
|
"bytes": 1363380,
|
|
"utc": "2026-07-25T07:59:15.916Z",
|
|
"phase": "play",
|
|
"pos": {
|
|
"x": 684,
|
|
"y": 0
|
|
},
|
|
"timeS": 7.7,
|
|
"score": 3,
|
|
"hp": 100,
|
|
"enemies": 3,
|
|
"level": 1,
|
|
"expectedScreen": {
|
|
"camX": 390,
|
|
"camY": -422,
|
|
"sx": 294,
|
|
"sy": 422
|
|
},
|
|
"brightness": {
|
|
"ok": true,
|
|
"width": 780,
|
|
"height": 1688,
|
|
"bright": 11560,
|
|
"total": 47190,
|
|
"ratio": 0.245
|
|
}
|
|
},
|
|
{
|
|
"name": "03-arena-edge-top.png",
|
|
"desc": "上边缘:玩家贴上界(y≈-1384),躯体不出视口、不潜墙下",
|
|
"sha256": "ed6b29c9eab72ce7bb101a8ade15091c4d3a2ffa99af91f9cd6b070fcc11c98a",
|
|
"bytes": 1170387,
|
|
"utc": "2026-07-25T07:59:16.482Z",
|
|
"phase": "play",
|
|
"pos": {
|
|
"x": 684,
|
|
"y": -1384
|
|
},
|
|
"timeS": 19.7,
|
|
"score": 12,
|
|
"hp": 100,
|
|
"enemies": 5,
|
|
"level": 1,
|
|
"expectedScreen": {
|
|
"camX": 390,
|
|
"camY": -1480,
|
|
"sx": 294,
|
|
"sy": 96
|
|
},
|
|
"brightness": {
|
|
"ok": true,
|
|
"width": 780,
|
|
"height": 1688,
|
|
"bright": 2570,
|
|
"total": 47190,
|
|
"ratio": 0.054
|
|
}
|
|
},
|
|
{
|
|
"name": "04-arena-edge-left.png",
|
|
"desc": "左边缘:玩家贴左界(x≈-684),左岩壁自然暗角",
|
|
"sha256": "c6c73e06a3e86a0a4d344c366dd6c443a94f84a72990cb0be2e74c10534f2a8d",
|
|
"bytes": 1106646,
|
|
"utc": "2026-07-25T07:59:17.005Z",
|
|
"phase": "play",
|
|
"pos": {
|
|
"x": -684,
|
|
"y": -1384
|
|
},
|
|
"timeS": 31.8,
|
|
"score": 21,
|
|
"hp": 100,
|
|
"enemies": 7,
|
|
"level": 1,
|
|
"expectedScreen": {
|
|
"camX": -780,
|
|
"camY": -1480,
|
|
"sx": 96,
|
|
"sy": 96
|
|
},
|
|
"brightness": {
|
|
"ok": true,
|
|
"width": 780,
|
|
"height": 1688,
|
|
"bright": 2866,
|
|
"total": 47190,
|
|
"ratio": 0.061
|
|
}
|
|
},
|
|
{
|
|
"name": "05-arena-edge-bottom.png",
|
|
"desc": "下边缘:玩家贴下界(y≈1384),下岩壁自然暗角",
|
|
"sha256": "8a6c88785457b2412ec70a29f819b063c4c74bace764fd811c9ce4e1bae07936",
|
|
"bytes": 1181703,
|
|
"utc": "2026-07-25T07:59:17.578Z",
|
|
"phase": "play",
|
|
"pos": {
|
|
"x": -684,
|
|
"y": 1384
|
|
},
|
|
"timeS": 55,
|
|
"score": 39,
|
|
"hp": 100,
|
|
"enemies": 16,
|
|
"level": 2,
|
|
"expectedScreen": {
|
|
"camX": -780,
|
|
"camY": 636,
|
|
"sx": 96,
|
|
"sy": 748
|
|
},
|
|
"brightness": {
|
|
"ok": true,
|
|
"width": 780,
|
|
"height": 1688,
|
|
"bright": 2323,
|
|
"total": 47190,
|
|
"ratio": 0.049
|
|
}
|
|
},
|
|
{
|
|
"name": "06-arena-corner-br.png",
|
|
"desc": "右下角:同时贴右+下界,两面自然暗角 + 角落收口",
|
|
"sha256": "0235e318787b20ceb1d04dbaa3b83e21c8f18c511f898fd44d8b016872329f7c",
|
|
"bytes": 1349184,
|
|
"utc": "2026-07-25T07:59:18.118Z",
|
|
"phase": "play",
|
|
"pos": {
|
|
"x": 684,
|
|
"y": 1384
|
|
},
|
|
"timeS": 72,
|
|
"score": 63,
|
|
"hp": 96,
|
|
"enemies": 36,
|
|
"level": 2,
|
|
"expectedScreen": {
|
|
"camX": 390,
|
|
"camY": 636,
|
|
"sx": 294,
|
|
"sy": 748
|
|
},
|
|
"brightness": {
|
|
"ok": true,
|
|
"width": 780,
|
|
"height": 1688,
|
|
"bright": 4973,
|
|
"total": 47190,
|
|
"ratio": 0.105
|
|
}
|
|
}
|
|
],
|
|
"boot": {
|
|
"ok": true
|
|
},
|
|
"arenaBgAssetProbe": "ready 1560x2960",
|
|
"startState": {
|
|
"phase": "play",
|
|
"pos": {
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
"pageErrors": [],
|
|
"consoleErrors": [
|
|
"2026-07-25T07:59:13.060Z [error] Failed to load resource: the server responded with a status of 404 (File not found)",
|
|
"2026-07-25T07:59:15.171Z [warning] Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true. See: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently",
|
|
"2026-07-25T07:59:15.592Z [warning] Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true. See: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently",
|
|
"2026-07-25T07:59:16.072Z [warning] Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true. See: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently",
|
|
"2026-07-25T07:59:16.705Z [warning] Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true. See: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently",
|
|
"2026-07-25T07:59:17.269Z [warning] Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true. See: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently",
|
|
"2026-07-25T07:59:17.778Z [warning] Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true. See: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently"
|
|
]
|
|
}
|