Atölye › Tetris Tarzı Bloklar › 16/32. adım
Parça artık kendi kendine düşecek. Bunun için bir oyun döngüsü kuruyoruz: saniyede yaklaşık 60 kez çalışan ve her seferinde ekranı yeniden çizen bir fonksiyon.
Ama parça her karede düşerse göz açıp kapayıncaya kadar dibe iner. O yüzden saati kullanıyoruz: tarayıcı döngüye her seferinde şu anki zamanı (milisaniye) verir. Son düşüşten bu yana 800 ms geçtiyse bir satır düşeriz.
Döngü her karede çizdiği için tuş dinleyicisindeki draw() artık gereksiz; onu siliyoruz.
```js
let lastDrop = 0
function loop(time) {
if (time - lastDrop >= 800) {
lastDrop = time
tryMove(0, 1)
}
draw()
requestAnimationFrame(loop)
}
requestAnimationFrame(loop)
```requestAnimationFrame(loop) → tarayıcıya "ekranı bir sonraki yenilemeden önce loop'u çalıştır" der. loop da
sonunda aynı isteği tekrarlar; böylece döngü hiç durmaz (saniyede ~60 tur).function loop(time) { → tarayıcı time olarak sayfa açıldığından beri geçen süreyi milisaniye cinsinden
verir (1000 ms = 1 saniye).let lastDrop = 0 → parçanın en son ne zaman düştüğü.if (time - lastDrop >= 800) { → son düşüşten beri en az 800 ms geçtiyse:lastDrop = time → "şimdi düştü" diye not al;tryMove(0, 1) → bir satır aşağı gitmeyi dene.draw() → if'in dışında: çizim her karede.requestAnimationFrame(loop) → döngüyü başlatır; eski tek seferlik draw() çağrısının yerini alır.let piece = ... satırının altına let lastDrop = 0 yaz.draw() satırını sil.draw() satırını sil; yerine loop fonksiyonunu ve bir boş satırdan sonra requestAnimationFrame(loop)
yaz.Beceriler: Oyun döngüsü
← Duvar itmesi Tepede rastgele bir parça →