Atölye › Ritim Şeritleri › 15/35. adım
Bir tuşa basınca hangi notaya vurulur? O şeritteki, henüz vurulmamış, zamanı şimdiye en yakın notaya.
Bunu bulmak için listeyi baştan sona gezeceğiz ve "şimdiye kadarki en yakın" notayı bir değişkende tutacağız. Bir sınıftaki en uzun öğrenciyi bulmak gibi: herkese tek tek bakarsın, daha uzununu görünce aklındakini değiştirirsin.
```js
function press(lane) {
lit[lane] = 8
let closest = null
for (const n of notes) {
if (n.hit || n.lane !== lane) continue
if (!closest || Math.abs(n.time - frame) < Math.abs(closest.time - frame)) closest = n
}
if (!closest) return
closest.hit = true
}
```let closest = null → aday. null "henüz hiçbir şey" demek.for (const n of notes) → her notaya sırayla bak.if (n.hit || n.lane !== lane) continue → vurulmuşsa ya da (||) başka şeritteyse (!== "eşit değil")
atla.Math.abs(n.time - frame) → Math.abs sayının işaretini atar: Math.abs(-3) → 3. Notanın zamanı şimdiden kaç
kare uzakta; erken ya da geç fark etmez.if (!closest || ... < ...) closest = n → ! "değil": "henüz aday yoksa ya da bu nota adaydan daha
yakınsa, yeni aday bu".if (!closest) return → o şeritte vurulacak nota kalmadıysa dur.closest.hit = true → en yakın notayı "vuruldu" diye işaretle. draw vurulmuş notaları çizmediği için ekrandan
kaybolur.press içinde lit[lane] = 8 satırının altına yeni satırları yaz; fonksiyonun son }'si altta kalsın.
Çalıştır, oyuna tıkla ve notalar gelirken D, F, J, K'ye bas.
Beceriler: Döngüler
← Tuşları göster Zamana yeterince yakın →