Atölye › Missile Command Tarzı Savunma › 6/35. adım
Bu oyundaki her füze (düşmanınkiler de seninkiler de) aynı şeyi yapar: belli bir hızla bir noktaya doğru
ilerler. Bunu bir kez, küçük bir fonksiyonda yazacağız: stepTowards (doğru adım at).
Fonksiyon bir nesne alır (x, y şu an nerede, tx, ty hedef nerede) ve onu hedefe doğru tam speed piksel
kaydırır. Hedefe vardıysa true döndürür. Ekranda henüz bir şey değişmeyecek.
```js
// Move a point `speed` pixels towards its target; true when it has arrived.
function stepTowards(m, speed) {
const dx = m.tx - m.x
const dy = m.ty - m.y
const distance = Math.hypot(dx, dy)
if (distance <= speed) {
m.x = m.tx
m.y = m.ty
return true
}
m.x += (dx / distance) * speed
m.y += (dy / distance) * speed
return false
}
```dx = m.tx - m.x, dy = m.ty - m.y → hedefe kadar yatayda ve dikeyde ne kadar yol kaldı.Math.hypot(dx, dy) → iki nokta arasındaki dümdüz uzaklık; okuldaki Pisagor: √(dx² + dy²).if (distance <= speed) → hedef bir adımdan yakınsa füzeyi hedefe oturt ve return true ("vardım"). return
fonksiyondan hemen çıkar.dx / distance, dy / distance → hedefe giden oku kendi uzunluğuna bölmek, uzunluğu 1 olan bir ok verir:
birim vektör, yani saf bir yön. Onu speed ile çarpınca tam o büyüklükte bir adım çıkar.(0.6, 0.8).return false → "henüz varmadım".reset fonksiyonunun kapanış }'inin altına bir boş satır bırak ve yorum satırıyla birlikte stepTowards
fonksiyonunu yaz. Çalıştır: ekran değişmez, kontroller yeşil olmalı.
Beceriler: Hız ve yerçekimi, Fonksiyonlar
← Enkaz Düşman füzesi fırlat →