refactor: 使用flutter对原先的web项目重构,正在进行中
This commit is contained in:
1 parent
273224f5cf
commit
18017f819a
205 files changed
+13563
No files matched your search
@@ -0,0 +1,59 @@
|
||||
// 存档点专项测试:触碰 -> 激活 -> 死亡 -> 回到存档点
|
||||
const handlers = {};
|
||||
const addL = (t, fn) => { (handlers[t] = handlers[t] || []).push(fn); };
|
||||
globalThis.addEventListener = addL;
|
||||
globalThis.window = { addEventListener: addL };
|
||||
const key = (type, code) => (handlers[type] || []).forEach(fn => fn({ code, preventDefault() { }, repeat: false }));
|
||||
const down = c => key('keydown', c);
|
||||
const up = c => key('keyup', c);
|
||||
|
||||
const { LEVELS } = await import('../js/levels/index.js');
|
||||
const { Level } = await import('../js/level.js');
|
||||
const { Player } = await import('../js/player.js');
|
||||
const { Input } = await import('../js/input.js');
|
||||
|
||||
let fail = 0;
|
||||
const err = m => { console.log(' ✗ ' + m); fail++; };
|
||||
|
||||
for (const d of LEVELS) {
|
||||
const L = new Level(d);
|
||||
const P = new Player(L);
|
||||
const saves = L.entities.filter(e => e.type === 'save');
|
||||
if (!saves.length) { console.log(` ${d.id} 无存档点`); continue; }
|
||||
|
||||
// 依次把玩家瞬移到每个存档点,检查是否激活
|
||||
for (const s of saves) {
|
||||
P.x = s.x + s.w / 2 - P.w / 2;
|
||||
P.y = s.y + s.h - P.h;
|
||||
P.vx = 0; P.vy = 0; P.dead = false; P.alive = true;
|
||||
L.update(1, P, null);
|
||||
P.update(1);
|
||||
Input.endFrame();
|
||||
if (!s.active) err(`${d.id} 存档点(${s.tx},${s.ty}) 触碰后未激活`);
|
||||
if (!P.savePoint) err(`${d.id} 存档点(${s.tx},${s.ty}) 未写入 player.savePoint`);
|
||||
}
|
||||
|
||||
// 死亡后应回到最后一个存档点
|
||||
const last = saves[saves.length - 1];
|
||||
const want = { x: last.x + last.w / 2 - P.w / 2, y: last.y + last.h - P.h };
|
||||
const spawn = L.spawn;
|
||||
P.kill(); // 死亡后不再自动重生(新语义:定格等待手动重生)
|
||||
P.respawn(); // 模拟玩家按 R 手动重生,应回到最后一个存档点
|
||||
for (let i = 0; i < 45; i++) { L.update(1, P, null); P.update(1); Input.endFrame(); }
|
||||
const dx = Math.abs(P.x - want.x), dy = Math.abs(P.y - want.y);
|
||||
const backToStart = Math.abs(P.x - spawn.x) < 3 && Math.abs(P.y - spawn.y) < 3;
|
||||
const ok = dx < 2 && dy < 2;
|
||||
console.log(` ${d.id.padEnd(3)} 存档=${saves.length} 重生=(${P.x.toFixed(0)},${P.y.toFixed(0)}) 期望=(${want.x.toFixed(0)},${want.y.toFixed(0)}) ${ok ? 'OK' : (backToStart ? '❌回到了起点' : '❌位置不符')}`);
|
||||
if (!ok) err(`${d.id} 死亡后未回到存档点`);
|
||||
|
||||
// 重生后是否立刻死亡
|
||||
const alive0 = P.alive;
|
||||
for (let i = 0; i < 20; i++) { L.update(1, P, null); P.update(1); Input.endFrame(); }
|
||||
if (alive0 && !P.alive) err(`${d.id} 在存档点重生后立刻死亡`);
|
||||
|
||||
// 存档点状态是否在软重置后保留
|
||||
if (!last.active) err(`${d.id} 软重置后存档点激活状态丢失`);
|
||||
}
|
||||
|
||||
console.log(fail ? `\n❌ ${fail} 项失败` : '\n✅ 存档点全部正常');
|
||||
process.exit(fail ? 1 : 0);
|
||||
Reference in new issue
Block a user