Atölye › Angry Birds Tarzı Sapan › 10/47. adım
Boşluk tuşu kuşu fırlatacak. Fırlatmak demek: sapanın tepesine 20 × 20'lik bir kuş gövdesi koymak ve ona bir hız vermek.
Hızın yönü nişanın yönü, büyüklüğü çekişle orantılı. 6. adımda kuşu geri çizmek için cos/sin'i çıkarmıştık;
şimdi ileri fırlatmak için onları çarparak kullanıyoruz. LAUNCH = 0.2: her piksellik çekiş 0.2 hız verir;
50 piksel çekersen hız 10 olur (karede 10 piksel).
```js
const LAUNCH = 0.2 // speed per pixel of pull
// The launch velocity: pulled back by `pull` pixels, the bird flies the opposite way.
const launchVelocity = () => ({ vx: Math.cos(aim.angle) * aim.pull * LAUNCH, vy: Math.sin(aim.angle) * aim.pull * LAUNCH })
function launch() {
const { vx, vy } = launchVelocity()
bird = body('bird', SLING.x - BIRD, SLING.y - BIRD, BIRD * 2, BIRD * 2)
bird.vx = vx
bird.vy = vy
bodies.push(bird)
}
else if (event.key === ' ') launch()
```const LAUNCH = 0.2 → çekişi hıza çeviren katsayı.const launchVelocity = () => ({ vx: ..., vy: ... }) → fırlatma hızını hesaplayan kısa fonksiyon:Math.cos(aim.angle) * aim.pull * LAUNCH → yatay hız vx: nişan yönünün yatay payı × çekiş × 0.2.Math.sin(aim.angle) * aim.pull * LAUNCH → dikey hız vy. Açı eksi olduğu için eksi çıkar: kuş yukarı gider.function launch() { → fırlatma:const { vx, vy } = launchVelocity() → dönen nesnenin iki alanını iki ayrı ada çıkarır.bird = body('bird', SLING.x - BIRD, SLING.y - BIRD, BIRD * 2, BIRD * 2) → 20 × 20'lik kuş kutusu; sol üst
köşesi SLING.x - 10, yani kutunun ortası tam sapanın tepesi.bird.vx = vx ve bird.vy = vy → hızını verir.bodies.push(bird) → gövdeler listesinin sonuna ekler; artık draw onu da çizer.else if (event.key === ' ') launch() → ' ' (tırnak içinde bir boşluk) Boşluk tuşunun adıdır.const MAX_PULL = 70 satırının altına LAUNCH satırını yaz.document.addEventListener('keydown', ...) satırının üstüne yorumu, launchVelocity'yi ve launch
fonksiyonunu yaz (sonra bir boş satır).else return satırının üstüne Boşluk satırını yaz.Beceriler: Hız ve yerçekimi, Klavye ve fare girdisi