Atölye › Zelda Tarzı Zindan › 10/22. adım
Kılıç değdiği düşmana vursun: düşman can kaybetsin ve geri savrulsun; 10 kare boyunca baktığın yönde karede 4 piksel kaysın. Canı kalmayan düşman yok olsun.
```js
const overlap = (a, b) => a.x < b.x + b.w && a.x + a.w > b.x && a.y < b.y + b.h && a.y + a.h > b.y
const box = (body) => ({ x: body.x, y: body.y, w: SIZE, h: SIZE })
const sword = swing > 0 ? swordBox() : null
for (const e of enemies) {
if (e.knock > 0) {
// Knocked back: slide away from the sword for a few frames.
e.knock -= 1
move(e, e.kx, e.ky)
}
if (sword && e.knock === 0 && overlap(sword, box(e))) {
e.hp -= 1
e.knock = 10
e.kx = player.dir[0] * 4
e.ky = player.dir[1] * 4
}
}
enemies = enemies.filter((e) => e.hp > 0)
```overlap(a, b) → iki kutu çakışıyor mu: her biri öbürü bitmeden başlıyor, yana ve dikey. box(body) → bir
gövdeden kutu.sword → sallama sürüyorsa kılıcın kutusu, değilse null.move ile kayar: duvarlar onu da durdurur.e.knock === 0 → bir sallama bir düşmana yalnız bir kez vursun (savrulurken yeniden vurulmaz).e.kx = player.dir[0] * 4 → baktığın yönde karede 4 piksel.filter((e) => e.hp > 0) → canı kalanları tut. Düşmanların canı 1: tek vuruş yeter.update'in üstüne overlap ve box yaz.update'in sonuna, geri sayım satırının altına sword satırını ve düşman döngüsünü yaz. Çalıştır ve bir
düşmana vur.Beceriler: Çarpışma tespiti
← Düşmanlar Peşine düşüyorlar →