Bölüm 1 · Sunum 3
Şekil çizmeyi biliyoruz. Bugün onları hareket ettireceğiz.
Ekranda tek tek duran resimler var. Peki hareketi nasıl görüyoruz?
draw() fonksiyonunun bir kez çalışması; ekranın bir kez güncellenmesi.
Eadweard Muybridge dörtnala koşan bir atı art arda dizdiği makinelerle fotoğrafladı.
draw() her çağrıldığında bu fotoğraflardan bir tane daha üretir.Fareyi alttaki kutuların üstünde gezdirin. Hangi sayıdan sonra koşu “resim resim” olmaktan çıkıp akıcı görünüyor?
setup()Program başladığında bir kez çalışır. Tuvali oluşturmak, başlangıç değerlerini vermek gibi hazırlık işleri burada yapılır.draw()Hazırlık bittikten sonra sürekli tekrarlanır. Varsayılan hız saniyede yaklaşık 60 kezdir. frameRate() ile bu değer değiştirilebilir.
draw sketch durana kadar tekrar eder.setup() bir kez çalışır: createCanvas() ve başlangıç ayarları.draw() ilk kez çalışır. Bu 1. frame.draw() yeniden çalışır. Bu 2. frame.| Ne sıklıkla? | Tipik işler | |
|---|---|---|
setup() | Başta bir kez | createCanvas(), başlangıç değerleri, frameRate() |
draw() | Her frame | background(), çizim, konum güncelleme |
setup’a çizdim. Neden kıpırdamıyor?setup bir kez çalışır. Resim de bir kez çizilir.draw’a taşıdım. Oldu!Kural: bir kez yapılacak hazırlık setup’a, her frame yenilenecek her şey draw’a.
setup() oyun dünyasını kurarTuval, başlangıç konumları, skorun sıfırlanması.draw() her frame’de üç iş yapar
draw(), oyun döngüsünün (game loop) kalbidir. Bölüm 2’nin sonunda bu döngüye ayrıntılı döneceğiz.
width ve height| Değişken | Anlamı | createCanvas(500, 400) sonrası |
|---|---|---|
width | Tuval genişliği (piksel) | 500 |
height | Tuval yüksekliği (piksel) | 400 |
width / 2createCanvas, farklı tuval
createCanvas(200, 200), (400, 200), (200, 400) ve (400, 400): önce genişlik, sonra yükseklik.width / 2“Düzenle” ile tuvali createCanvas(300, 300) yapın. Daire hâlâ ortada mı? ellipse(250, 150, …) yazsaydık ne olurdu?
frameCount: kaçıncı frame’deyiz?frameCountp5.js’in yerleşik değişkenidir. draw() her çalıştığında 1 artan bir sayaçtır: ilk çağrıda 1, ikincide 2 olur.Daire ne yapar? Tuvalin sağ kenarına gelince ne olur?
Her frame x bir piksel artıyor. 400’ü geçince daire tuvalin dışında kalıyor. Onu geri getirmenin bir yolu lazım.
%Bölümden kalanı verir. Örneğin 7 % 3 ifadesinin sonucu 1’dir.Sayı büyüdükçe kalan hep aynı aralıkta döner. Saatin 12’den sonra yeniden 1’e dönmesi gibi.
| n | n % 4 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 0 |
| 5 | 1 |
| 6 | 2 |
| 7 | 3 |
| 8 | 0 |
frameCount % width: sona gelince başa dönframeCount % width sayacı 0 ile width − 1 arasında döndürür. Daire sağdan çıkınca soldan yeniden girer.
Pac-Man’de sağ kenardaki tünele giren karakter soldan çıkar; Asteroids’te gemi ekranın her kenarında aynısını yapar. İkisinin arkasında da bölümden kalan vardır.
background satırını draw’dan silersek ne olur?Daire yine hareket eder mi? Ekranda başka ne görürüz?
background neden draw içinde?Her frame’in başında sahneyi temizler. Temizlenmezse yeni çizim eskilerin üstüne biner.backgroundFareyi tuvalde gezdirin. Eski frame’ler tam silinmiyor, her frame biraz soluyor: kuyruklu yıldız izi. Windows’taki Solitaire’in kazanınca kartları saçtığı sahne de silinmeyen frame’lerden oluşur.
draw’ı durdurmak: noLoop() ve loop()noLoop()draw() tekrarını durdurur. Hareket olmayan çizimlerde setup içine yazılır; draw yalnızca bir kez çalışır.loop()Durmuş draw() tekrarını yeniden başlatır.Geçen dersteki dört kombinasyon ve yedi adım örneklerinde noLoop() vardı: çizim değişmediği için tekrar etmeye gerek yoktu.
p5js.org/reference| Bakılacak fonksiyon | Ne işe yarar? |
|---|---|
square() | Kare |
triangle() | Üç köşeli şekil |
quad() | Dört köşeli şekil |
arc() | Daire yayı |
noLoop(), loop() | draw’ı durdur, başlat |
Oyun örneklerimiz çoğunlukla rect, ellipse, line ve point ile ilerleyecek. Diğerlerini referanstan tanımanız yeterli.
noLoop, loop, triangle, quad, square, ellipse ve arc sayfalarını açın. Her biri için bir cümlelik not alın.rect ile square farkı ne? triangle ve quad kaç köşe ister? ellipse ile arc arasındaki fark ne?rect() ile ellipse() arasındaki konumlandırma farkı neden hata kaynağı olur?draw()’ın sürekli çalışması oyun geliştirmede ne anlama gelir?background() çoğu animasyonda neden her frame yeniden çağrılır?fill(255, 0, 0) ile fill(128) arasındaki fark ne? Gri ton ne zaman yeter?setup()’a benziyor: bir kez yapılıyor mu?draw()’a benziyor: tekrar tekrar mı yapılıyor?Kayan daire örneğinden başlayın. Her adımda yalnızca bir satır değişecek.
250’yi 100’e bölünce kalan 50. Daire tuvali iki kez geçmiş, üçüncü turun ortasında.
background en son çalışıyor ve daireyi her frame’de örtüyor. Sıra önemli.
createCanvas(400, 400) satırını draw’ın içine taşırsanız?Bir kez yapılacak hazırlık setup’ın işidir. draw’a yazılan her şey her frame tekrarlanır.
setup() başta bir kez; draw() saniyede yaklaşık 60 kez çalışır.draw()’ın bir turu. FPS: saniyedeki frame sayısı.width ve height tuvalin boyutunu tutar; ortalamak için width / 2.frameCount her frame 1 artar; % ile başa döndürülür.background her frame sahneyi temizler; yoksa şekiller iz bırakır.p5js.org/reference.Sıradaki ders
Değişkenler, veri türleri ve operatörler.