Atölye › Puzzle Bobble Tarzı Balon Atıcı › 10/31. adım
Atış, uçan bir balondur: bir yeri, nişan yönünde bir hızı (karede SPEED piksel) ve yüklü balonun rengi var. Hızı
yine cos ve sin ile iki parçaya ayırırız: vx ve vy.
Ateş edince sıradaki balon atıcıya geçer, yeni bir sıradaki seçilir. Havada bir balon varken ikinci atış olmaz. Boşluk ateş eder; fareyi ya da parmağı kaldırmak da: telefonda nişan almak istediğin yere dokunur, bırakırsın.
```js
const SPEED = 12
let shot // the bubble in flight: { x, y, vx, vy, color }, or null
shot = null
function shoot() {
if (shot) return
shot = { x: SHOOTER.x, y: SHOOTER.y, vx: Math.cos(aim) * SPEED, vy: Math.sin(aim) * SPEED, color: loaded }
loaded = next
next = pickColor()
}
else if (event.key === ' ') shoot()
canvas.addEventListener('pointerup', shoot)
if (shot) drawBubble(shot.x, shot.y, shot.color)
```const SPEED = 12 → uçan balonun hızı (piksel/kare).let shot → havadaki balon; yoksa null ("hiçbir şey"). reset içinde shot = null.if (shot) return → havada balon varsa ateş etme.shot = { x: SHOOTER.x, y: SHOOTER.y, vx: Math.cos(aim) * SPEED, vy: Math.sin(aim) * SPEED, color: loaded } → atıcıdan,
nişan yönünde, yüklü renkte bir balon.loaded = next ve next = pickColor() → sıradaki atıcıya geçer, yeni bir sıradaki gelir.else if (event.key === ' ') shoot() → Boşluk ateş eder.canvas.addEventListener('pointerup', shoot) → bırakmak da ateş eder.if (shot) drawBubble(...) → havada balon varsa onu çiz.SHOOTER satırının altına SPEED yaz.let next ... satırının altına yorumuyla let shot ... yaz.reset içinde aim = -Math.PI / 2 satırının altına shot = null yaz.reset fonksiyonunun altına bir boş satır bırak ve shoot fonksiyonunu yaz.else return satırının üstüne Boşluk satırını yaz.pointerdown satırının altına pointerup satırını yaz.draw içinde sıradaki balonu çizen satırın altına uçan balonu çizen satırı yaz. Çalıştır ve Boşluk'a bas.Beceriler: Hız ve yerçekimi, Klavye ve fare girdisi