Bölüm 2 · Sunum 5
Hareket ne kadar hızlı? Her bilgisayarda aynı hızda mı?
Düşmanlar yürür, süre azalır, bulutlar kayar. Bunları kim, ne sıklıkla ilerletiyor?
setup(): tuval, başlangıç değişkenleri, bir kerelik ayarlar.draw(): her frame’de arka plan, konumların güncellenmesi, çizim.Fareyi soldaki koyu alanda gezdirin. Top kırmızı çizgiye hemen gitmez: önce girdi okunur, sonra konum güncellenir, en son çizilir. Gerçek oyunda bu üç adım saniyede 60 kez döner.
Önce konum güncelleniyor, sonra top çiziliyor. Sağdan çıkınca soldan yeniden giriyor.
draw’ın içinde güncelleme ile çizim birbirine karışmışsa hatayı aramak zorlaşır.
cizTop’a bakın.guncelleTop’a bakın.Küçük örneklerde ikisi aynı fonksiyonda yazılabilir. Proje büyüdükçe ayırmak okumayı ve hata ayıklamayı kolaylaştırır.
setup ile draw ayrımı performanstırsetup içinde, bir kezcreateCanvas(), görsel yükleme, büyük veri hazırlama gibi maliyetli işler.draw içindeAynı iş her frame tekrarlanır ve FPS düşer.Sketch yavaş çalışıyorsa ilk bakılacak yer: draw’ın içinde her frame yapılması gerekmeyen bir iş var mı?
Fareyi alttaki çubukta sağa götürün. draw içindeki iş arttıkça bir frame’in hazırlanması uzar ve FPS düşer. Sınır bilgisayardan bilgisayara değişir; sizinki kaçta düşmeye başlıyor?
draw() fonksiyonunun kaç kez çalıştığının ölçüsüdür.Buradaki “frame”, geometrik bir kare değil; draw() çağrısının tek bir tekrarıdır.
frameRate() ile ayarlanır.Üç top da saniyede aynı yolu alıyor; yalnızca ekrana kaç kez çizildikleri farklı. En alttaki top “ışınlanıyor” gibi görünür: hızlı nesneleri gözle izlemek zorlaşır.
frameRate(): iki farklı kullanım| İfade | Anlamı | Sonuç |
|---|---|---|
frameRate(60) | Hedef 60 FPS | Çoğu monitörde akıcı hareket |
frameRate(30) | Hedef 30 FPS | Daha düşük yük, daha seyrek güncelleme |
frameRate() | Ölçülen anlık FPS | Ekranda gösterilebilir (örneğin 58.2) |
“Düzenle” ile frameRate(60) değerini 10, sonra 5 yapın. Ölçülen değer nasıl değişiyor?
nf(): sayıyı okunur yazmak| Parametre | Görevi |
|---|---|
sayi | Biçimlenecek değer |
solBasamak | Noktanın solundaki basamak sayısı; gerekirse başa 0 ekler |
sagBasamak | Noktanın sağındaki basamak sayısı; yuvarlar |
| Çağrı | Sonuç |
|---|---|
nf(58.273, 0, 1) | "58.3" |
nf(58.273, 0, 0) | "58" |
nf(7, 3, 0) | "007" |
nf(3.14159, 1, 2) | "3.14" |
nf(sayi, solBasamak, sagBasamak) yalnızca gösterimi düzenler; FPS hesabını değiştirmez.
topX = topX + 3. FPS 60’tan 30’a düşerse top ne yapar?Bir saniyede kaç piksel yol alıyordu? Şimdi kaç piksel alır?
Çözüm, hızı frame sayısına değil geçen gerçek süreye bağlamak: deltaTime. Onu bir sonraki konuda göreceğiz.
| Kavram | Birim | Ne ölçer? | Tipik değerler |
|---|---|---|---|
| Yenileme hızı | Hz | Monitörün saniyede kaç kez yeni görüntü çizdiği | 60, 75, 120, 144, 165, 240… |
| FPS | frame/s | Oyunun saniyede kaç frame ürettiği | p5.js’te hedef 30–60; oyunlarda 60–240+ |
Çoğu ofis ve dizüstü ekranı 60 Hz’dir. Oyun monitörlerinde 120–144 Hz yaygın; telefon ve tabletlerde 90 / 120 Hz paneller sıklaşıyor.
frameRate() çağrılmazsa p5.js daha yüksek FPS’e çıkmaya çalışabilir. Frame başına sabit piksel ekleyen hareket o zaman daha hızlı oynar.frameRate(60) yazıp hedefi açıkça vermek, paneller arası farkı azaltır. Asıl güvenilir çözüm yine deltaTime.
“Kaç fps iyi?” sorusunun cevabı ortama göre değişir. Film izlemek ile nişancı oyunu oynamak aynı ihtiyaç değil.
x += 3 ile giden bir kare düşünün. FPS 60’tan 30’a inince ne olur? Önce kendiniz yazın.deltaTime’ın bu sorunu nasıl çözeceğini tek cümleyle tahmin edin.Eksik kalan adımı (bir sınır, bir başlangıç değeri, tek seferlik bir olay) şimdi tamamlamak, sonra büyük bir sketch’in içinde aramaktan kolaydır.
“Şimdi X biliyorum; bundan sonra Y için buna ihtiyacım var.”
Bu cümleyi bugünkü konu için doldurun. Kuramıyorsanız, eksik kalan başlığın örneğini bir kez daha çalıştırın.
frameRate(30) yapın ve yeniden ölçün. Tahmininiz tuttu mu?guncelleTop() ve cizTop() olarak ikiye bölün. İkinci bir top ekleyin: daha yavaş ve başka renkte.draw içinde 20 000 turluk bir for ile küçük daireler çizin. FPS kaça düştü?x += 2. FPS 20’ye düşerse?Frame sayısı üçte bire indi; saniyede alınan yol da üçte bire iner. Süre üç katına çıkar.
draw içinde olmamalı?background(30)topX = topX + 3createCanvas(500, 300)ellipse(topX, 150, 50, 50)Tuval bir kez kurulur. draw’a yazılırsa saniyede 60 kez yeniden kurulur ve FPS düşer.
frameRate(120) yazdınız. Ekranda ölçülen FPS 60 görünüyor. Neden olabilir?frameRate yalnızca 60’a kadar sayı kabul eder.nf sayıyı yarıya böler.Tarayıcı çizimi monitörün yenileme döngüsüyle eşler. 60 Hz bir ekranda 60’ın üstüne çıkmak çoğu zaman mümkün olmaz.
setup’a aittir; draw’a yazılırsa FPS düşer.draw’ın çalışma sayısı. frameRate(60) hedef verir; frameRate() ölçer.x += 3 gibi frame’e bağlı hareket, her cihazda farklı hızda oynar.Bölüm 2 bitti
Birçok nesneyi tek bir listede tutmak ve her cihazda aynı hızda hareket etmek.