Atölye › Angry Birds Tarzı Sapan › 19/47. adım
Körlemesine nişan almak sinir bozucu. Fiziği bildiğimize göre kuşun yolunu atıştan önce çizebiliriz: beyaz noktalardan bir yay.
t kare sonra kuş nerede olacak? İki parçası var:
x her karede vx kadar büyür → SLING.x + vx * t.GRAVITY kadar artar; düşülen yol zamanın karesiyle büyür →
SLING.y + vy * t + (GRAVITY * t * t) / 2.```js
const { vx, vy } = launchVelocity()
ctx.stroke()
ctx.fillStyle = 'rgba(255, 255, 255, 0.8)'
for (let t = 4; t <= 60; t += 4) {
// Where the bird will be after t frames: x grows steadily, y follows a parabola.
const x = SLING.x + vx * t
const y = SLING.y + vy * t + (GRAVITY * t * t) / 2
if (y > GROUND) break
ctx.fillRect(x - 2, y - 2, 4, 4)
}
```const { vx, vy } = launchVelocity() → fırlatılsaydı kuşun alacağı hız. if'in en üstünde hesaplanır.ctx.fillStyle = 'rgba(255, 255, 255, 0.8)' → biraz saydam beyaz. rgba'daki son sayı saydamlıktır
(1 tam dolu, 0 görünmez).for (let t = 4; t <= 60; t += 4) { → sayma döngüsü: t 4'ten başlar, her turda 4 artar (t += 4), 60'ı
geçince durur. t = 4, 8, 12, ... 60: dört karede bir nokta.const x = SLING.x + vx * t → yatay yer: sabit hızla gidildiği için hız × zaman.const y = SLING.y + vy * t + (GRAVITY * t * t) / 2 → dikey yer: yukarı hız × zaman artı yerçekiminin o ana
kadar aşağı çektiği yol. t * t zamanın karesi: düşüş gittikçe hızlanır. Bu formül bir parabol.if (y > GROUND) break → nokta zeminin altına düştüyse break döngüyü hemen bitirir; sonrakiler çizilmez.ctx.fillRect(x - 2, y - 2, 4, 4) → 4 × 4'lük minik kare; - 2 onu noktanın tam ortasına oturtur.draw içinde if (state === 'aiming') { satırının hemen altına const { vx, vy } = launchVelocity() yaz.ctx.stroke() satırının altına noktaların fillStyle satırını ve for döngüsünü yaz.Beceriler: Hız ve yerçekimi
← Sıradaki kuş Bir noktadan nişana →