Bölüm 3 · Sunum 1
Hareketi frame sayısına değil, geçen gerçek süreye bağlayacağız.
Kod aynı, oyun aynı. Fark nereden geliyor olabilir?
İpucu: geçen dersin son konusu.
x += 3 hızı frame sayısına bağlar| Bilgisayar | FPS | Saniyede yol |
|---|---|---|
| Hızlı | ~60 | 60 × 3 = 180 piksel |
| Yavaş | ~30 | 30 × 3 = 90 piksel |
Her frame 3 piksel ekliyoruz. Saniyede kaç frame üretilirse o kadar yol alınır.
İki topun kodu da aynı: x += 3. Alttaki bilgisayar yalnızca yarısı kadar frame üretebiliyor.
Bugünkü konu, profesyonel stüdyoların da zaman zaman takıldığı bir konu.
Mermi frame başına 15 piksel gitsin:
Fizik tabanlı ya da ağ üzerinden eşlenen oyunlarda bu fark kabul edilemez.
Bir araba “saatte 60 km” gider; “motor devri başına 2 metre” demeyiz. Hızın doğal birimi ne?
deltaTimedeltaTimeBir önceki draw() çağrısından bu yana geçen süre, milisaniye cinsinden. p5.js otomatik günceller; bizim atamamız gerekmez.| FPS | deltaTime |
|---|---|
| 60 | ≈ 16.7 ms |
| 30 | ≈ 33.3 ms |
| 10 | ≈ 100 ms |
Frame’ler seyrekleşince her frame’in “süresi” uzar. Bu süreyi biliyorsak, o frame’de ne kadar yol alınacağını hesaplayabiliriz.
120 piksel / saniyedeltaTime / 1000deltaTime milisaniyedir, saniye değil. 1 saniye = 1000 ms olduğu için önce 1000’e bölünür.| İfade | Örnek değer | Anlamı |
|---|---|---|
HIZ | 120 | Saniyede 120 piksel |
deltaTime | ≈ 16.7 (ms) | Son frame’in süresi; henüz saniye değil |
deltaTime / 1000 | ≈ 0.0167 (s) | Aynı süre, saniye cinsinden |
HIZ * deltaTime / 1000 | ≈ 2 piksel | Bu frame’deki kayma |
deltaTime ile“Düzenle” ile frameRate(60) değerini 30, sonra 10 yapın. Top takılarak ilerler ama aynı sürede aynı yolu alır.
| Yöntem | 60 FPS (dt ≈ 16.7 ms) | 30 FPS (dt ≈ 33.3 ms) | Saniyede toplam |
|---|---|---|---|
topX + 3 | +3 px / frame | +3 px / frame | 180 px ve 90 px |
topX + 120 * dt | +2 px / frame | +4 px / frame | ≈ 120 px, ikisinde de |
/ 1000 yazmayı unutursak ne olur?deltaTime yaklaşık 16.7 iken bir frame’de kaç piksel eklenir?
Birim özeti: HIZ piksel/saniye · deltaTime / 1000 saniye · çarpım piksel.
Sekme arka plandayken draw duraklar. Döndüğünüz ilk frame’de deltaTime kaç olur? Top ne yapar?
deltaTime çok büyüyebilirİki frame arasındaki süre birkaç saniyeye çıkar. Top tek frame’de yüzlerce piksel atlar; bir duvarın içinden bile geçebilir.
Tek frame’de en fazla 50 ms sayılır.
deltaTime yeterli. Sekmeden dönünce ani bir sıçrama görürseniz bu beklenen davranıştır.deltaTime gösterilir.zaman değişkeniHer frame dtSaniye kadar artan, birikimli bir saat. Salınımın fazı bu saate bağlanacak.drawframeCount değil de zaman?sin(frameCount * 0.05)Faz frame sayısına bağlı. 30 FPS’te salınım yarı hızda olur; az önceki tutarsızlık dikey eksende geri gelir.sin(zaman * SALINIM_HIZI)zaman geçen gerçek süredir. Salınımın hızı da FPS’ten bağımsız olur; tıpkı yatay hareket gibi.setup içinde frameRate(30) deneyin. Topun yatay hızı gözle aynı kalmalı; yalnızca akıcılık değişir. Sonra topX = topX + 5 satırını geçici olarak geri getirip farkı gözleyin.topAX = topAX + 4.topBX = topBX + HIZ * deltaTime / 1000 (örneğin HIZ = 240).frameRate() ve “A: frame”, “B: deltaTime” etiketlerini gösterin.frameRate(60) ve frameRate(30)’u sırayla deneyin. Hangisinin temposu değişiyor? Bir iki cümleyle not edin.guncelle ve ciz işlerini ayrı fonksiyonlara bölün.deltaTime’ı iki kez mi böldü, 1000’i mi unuttu?min(deltaTime, 50) tavanı, hafif iz. Sonra “neleri değiştirdin, madde madde açıkla” deyin.deltaTime’ın çok büyüdüğü senaryoyu kendi cümlelerinizle yazın.min(deltaTime, 50) benzeri bir sınırlama (clamp) iskeleti isteyin.frameCount kullanmayın; deltaTime ile biriktirin.deltaTime ile olsun, sınır min(deltaTime, 50) ile korunsun.Köprü cümlesi: “Şimdi X biliyorum; bundan sonra Y için buna ihtiyacım var.” Bugünkü konu için doldurun.
20 ms = 0.02 saniye. 200 × 0.02 = 4 piksel.
x += 3. Oyuncunun monitörü 144 Hz ve oyun 144 FPS’te çalışıyor. Saniyede kaç piksel?144 × 3 = 432. Siz 60 FPS’te 180 piksel/saniye için tasarlamıştınız; oyun bu oyuncuda 2,4 kat hızlı.
x = x + 150;x = x + 150 * deltaTime;x = x + 150 * deltaTime / 1000;x = x + 150 / deltaTime;Hız (piksel/saniye) × süre (saniye) = yol (piksel). deltaTime milisaniye olduğu için 1000’e bölünür.
x += n FPS’e bağımlıdır: frame sayısı değişince hız değişir.deltaTime: son frame’den bu yana geçen süre, milisaniye.x += HIZ * deltaTime / 1000./ 1000 unutulursa top ekrandan fırlar.deltaTime çok büyür; min(deltaTime, 50) ile sınırlanabilir.frameCount yerine biriken zaman.Sıradaki ders
Diziler: birçok değeri tek bir adla tutmak.