Atölye › Space Invaders Tarzı › 9/21. adım
İstilacılar birlikte, adım adım yürüsün: her yarım saniyede yana 10 piksel. Dizilişin kenarı ekranın kenarını geçecekse, o adımda yana değil 16 piksel aşağı insinler ve yön değiştirsinler. Klasik istila yürüyüşü.
```js
let dir = 1 // +1 marching right, -1 marching left
let lastStep = 0
function stepInterval() {
return 500
}
function march() {
const living = alive()
const left = Math.min(...living.map((invader) => invader.x))
const right = Math.max(...living.map((invader) => invader.x + invader.w))
if ((dir > 0 && right + 10 > canvas.width - 10) || (dir < 0 && left - 10 < 10)) {
for (const invader of living) invader.y += 16
dir = -dir
} else {
for (const invader of living) invader.x += 10 * dir
}
}
if (now - lastStep >= stepInterval()) {
lastStep = now
march()
}
```dir → yön: 1 sağa, -1 sola. lastStep → son adımın zamanı.living.map((invader) => invader.x) → yaşayanların x'lerinin listesi; Math.min(...liste) en küçüğü. ... listeyi
tek tek sayılara yayar. Böylece dizilişin sol ve sağ kenarı bulunur.(dir > 0 && right + 10 > canvas.width - 10) || (dir < 0 && left - 10 < 10) → sağa giderken bir sonraki adım sağ
kenara 10 pikselden yaklaşacaksa veya sola giderken sol kenara: aşağı in (y += 16) ve dir = -dir ile dön.10 * dir piksel yana.update'te: son adımdan beri stepInterval() kadar zaman geçtiyse bir adım at. Aralığı bir fonksiyondan alıyoruz;
ileride hızlanacak.dir ve lastStep satırlarını yaz.shoot fonksiyonunun altına stepInterval ve march fonksiyonlarını yaz.update'in sonuna, bir boş satırdan sonra adım bloğunu yaz.Beceriler: Oyun durumları, Oyun döngüsü