Atölye › Asteroids › 12/41. adım
Ekranda aynı anda birçok mermi olabilir; onları bir dizide (listede) tutacağız. shoot (ateş et) fonksiyonu
listeye bir mermi ekleyecek.
Mermi burundan çıkar ve baktığın yöne uçar. Hızına geminin kendi hızı da eklenir: giden bir arabadan ileri atılan top, yerde duran birinin attığından hızlı gider. Bunu eklemeseydik hızlı uçarken attığın mermi burundan sürünerek çıkar, hatta geride kalırdı. Her merminin bir de ömrü var: kaç kare yaşayacağı.
Bu adımda ekranda bir şey değişmez; ateş tuşunu bir sonraki adımda bağlayacağız.
```js
const BULLET_SPEED = 7
const BULLET_LIFE = 55 // frames
let bullets
function shoot() {
const dx = Math.cos(ship.angle)
const dy = Math.sin(ship.angle)
bullets.push({
x: ship.x + dx * SHIP_R,
y: ship.y + dy * SHIP_R,
vx: ship.vx + dx * BULLET_SPEED,
vy: ship.vy + dy * BULLET_SPEED,
life: BULLET_LIFE,
})
}
bullets = []
```BULLET_SPEED = 7 → merminin kendi hızı; BULLET_LIFE = 55 → kaç kare yaşayacağı (yaklaşık bir saniye).let bullets → mermi listesi. En altta bullets = [] ile boş liste olarak başlar.const dx = Math.cos(ship.angle), dy = Math.sin(...) → baktığın yön. Aynı hesabı iki kez yazmamak için bir kere
hesaplıyoruz.bullets.push({ ... }) → listenin sonuna yeni bir mermi nesnesi ekler. Uzun nesne okunsun diye her alan ayrı
satırda; sondaki virgül serbest.x: ship.x + dx * SHIP_R → burnun yeri (çizimdeki tip ile aynı nokta).vx: ship.vx + dx * BULLET_SPEED → geminin hızı + mermi hızı.const MAX_SPEED = 6 satırının altına iki mermi sabitini yaz.let ship satırının altına let bullets yaz.document.addEventListener('keydown', ... satırının üstüne shoot fonksiyonunu yaz; altında bir boş satır kalsın.resetShip() satırının üstüne bullets = [] yaz.Beceriler: Diziler ve nesneler, Hız ve yerçekimi
← Ekranın çevresinden dolaş Ateş! →