Atölye › Puzzle Bobble Tarzı Balon Atıcı › 30/31. adım
Kısa nişan çizgisi yerine atışın izleyeceği yolu noktalarla gösterelim: duvarlardan sekerek çarpacağı balona kadar. Duvardan sektirmeli atışlar çok kolaylaşır. İşin güzeli, yolu hesaplamak için atılan balonu hareket ettiren kodun aynısını küçük adımlarla "prova" ediyoruz.
```js
// The path the shot will take, bouncing off the walls, until it would touch a bubble.
function guide() {
let x = SHOOTER.x
let y = SHOOTER.y
let vx = Math.cos(aim) * 4
const vy = Math.sin(aim) * 4
ctx.fillStyle = 'rgba(255, 255, 255, 0.5)'
for (let i = 1; i < 200; i++) {
x += vx
y += vy
if (x < R || x > canvas.width - R) vx = -vx
if (touches(x, y)) break
if (i % 5 === 0) ctx.fillRect(x - 1.5, y - 1.5, 3, 3)
}
}
if (state === 'playing') guide()
```let x, let y → hayali bir balon nişancıdan başlar.Math.cos(aim) * 4, Math.sin(aim) * 4 → nişan yönünde 4 piksellik küçük adımlar (açıyı x ve y adımına çeviren
trigonometri, atışta da kullandığımız).for (let i = 1; i < 200; i++) → en fazla 200 adım prova et.if (x < R || x > canvas.width - R) vx = -vx → yan duvara gelince gerçek atış gibi sek.if (touches(x, y)) break → bir balona ya da tavana değecekse dur (break döngüden çıkar).if (i % 5 === 0) → her 5 adımda bir, 3×3'lük küçük bir nokta çiz.draw içindeki eski çizgi kodunun yerine guide(), yalnız oyun sürerken.function draw() { satırının üstüne yorumu ve guide fonksiyonunu yaz (arada bir boş satır kalsın).draw içindeki nişan çizgisini çizen altı satırı (ctx.strokeStyle = ...'dan ctx.stroke()'a kadar) sil; yerine
if (state === 'playing') guide() yaz.Beceriler: Hız ve yerçekimi
← En iyi skor Kendin yap: balonları değiştir →