Bir cümlelik özet
Bir oyundaki karakterin gerçekçi biçimde düşmesini, zıplamasını ve yere çarpmasını sağlamak için hız değişkeni, yerçekimi ve çarpışma algılamayı öğreniyoruz.
Neden önemli?
Scratch'te bir kediyi hareket ettirmek kolaydır: "10 adım git" dersin ve kedi kayar gider. Ama gerçek oyunlarda nesneler öyle sabit hızla süzülmez. Bir top havaya atıldığında yavaşlar, durur ve tekrar hızlanarak düşer. Bir karakter zıplayınca önce yükselir, sonra geri iner.
Bu doğal görünümü elde etmek için nesnenin hızını ayrı tutmamız ve bu hızı her karede biraz değiştirmemiz gerekir. Bu ders, "top neden gerçek gibi zıplıyor?" sorusunun cevabıdır. Aynı mantık zıplama oyunlarının, platform oyunlarının ve fırlatma oyunlarının temelini oluşturur.
Ben bu fikri ilk denediğimde karakteri düz bir hızla aşağı indirmiştim; hareket robot gibi görünüyordu. Hızı her karede biraz artırınca düşüş birden gerçekçi oldu. Aşağıda bu adımları paylaşıyorum.
Hız: hareketin motoru
Hız değişkeni nedir?
Konum, karakterin nerede olduğudur. Hız, karakterin her karede konumunu ne kadar değiştireceğidir. Scratch bir sahneyi saniyede birçok kez yeniden çizer; her yeniden çizmeye "kare" diyelim. Eğer her karede konuma sabit bir sayı eklersek, nesne düzgün akıcı hareket eder.
Bunu yapmak için Değişkenler (Variables) kategorisinden yeni bir değişken oluştururuz. Adına x hızı diyelim. Sonra bir döngü içinde x konumunu bu değişken kadar değiştiririz.
Örnek: sağa doğru hızlanan top
Aşağıdaki program topu önce yavaş, sonra gitgide daha hızlı sağa götürür. Çünkü her karede x hızı biraz artıyor.
yeşil bayrağa tıklandığında
x hızı değişkenini 0 yap
sürekli tekrarla
x konumunu (x hızı) kadar değiştir
x hızı değişkenini 0.5 değiştir
Burada iki farklı şey oluyor:
x konumunu (x hızı) kadar değiştir(Hareket / Motion): topu hız kadar kaydırır.x hızı değişkenini 0.5 değiştir(Değişkenler / Variables): bir sonraki kare için hızı büyütür.
Hız sabit kalsaydı top düz hızla kayardı. Hızı her karede artırdığımız için top hızlanır. İşte fizik hissi buradan gelir: hareketi değil, hızın kendisini değiştiriyoruz.
Yerçekimi ve zıplama
Yerçekimi her karede hızı azaltır
Yerçekimi, nesneleri sürekli aşağı çeken bir kuvvettir. Scratch'te y ekseni yukarıyı gösterir: y konumu büyürse nesne yükselir, küçülürse alçalır. Yerçekimini taklit etmek için bir y hızı değişkeni tutarız ve her karede bu hızı biraz azaltırız. Sonra y konumunu bu hız kadar değiştiririz.
Kural iki satırdır:
y konumunu (y hızı) kadar değiştir— nesneyi mevcut hızıyla taşı.y hızı değişkenini -0.5 değiştir— hızı biraz aşağı yönlü yap.
Negatif sayı ile değiştirmek hızı zamanla küçültür; bir süre sonra hız negatif olur ve nesne aşağı düşmeye başlar.
Örnek: yerçekimiyle düşen karakter
yeşil bayrağa tıklandığında
y hızı değişkenini 0 yap
sürekli tekrarla
y konumunu (y hızı) kadar değiştir
y hızı değişkenini -0.5 değiştir
Karakteri sahnenin üstüne koyup bu programı çalıştırırsan, önce yavaş, sonra hızlanarak aşağı düşer. Tıpkı elinden bıraktığın bir top gibi. Buradaki sihir tek satırda: hızı her karede biraz daha negatif yapmak.
Zıplama nasıl olur?
Zıplama, aslında hıza aniden yukarı yönlü büyük bir değer vermektir. Boşluk tuşuna basınca y hızı değişkenini pozitif bir sayı yaparız. Yerçekimi sonra bu hızı yavaş yavaş azaltır; karakter yükselir, yavaşlar, durur ve geri düşer.
boşluk tuşuna basıldığında
y hızı değişkenini 8 yap
Bu blok Olaylar (Events) kategorisindendir. Düşme programı arka planda çalışmaya devam ederken bu tek dokunuş karakteri havaya fırlatır. 8 sayısını büyütürsen zıplama yükselir, küçültürsen alçalır.
Çarpışma algılama
Zemine değmek
Karakter sonsuza kadar düşemez; bir yerde durmalı. Bunun için Algılama (Sensing) kategorisindeki değiyor mu? bloğunu kullanırız. Karakter zemine (örneğin yeşil bir çizgi kuklasına) değdiğinde düşüşü durdururuz: y hızı değişkenini 0 yaparız.
yeşil bayrağa tıklandığında
y hızı değişkenini 0 yap
sürekli tekrarla
y konumunu (y hızı) kadar değiştir
eğer <(zemin) rengine değiyor mu?> ise
y hızı değişkenini 0 yap
değilse
y hızı değişkenini -0.5 değiştir
Burada eğer ... ise ... değilse bloğu (Kontrol / Control) karar veriyor: zemine değiyorsak hızı sıfırla ve yerçekimini uygulama; değmiyorsak yerçekimini çalıştırmaya devam et. Böylece karakter zemine oturur ve orada durur.
Örnek: kukaya çarpınca dur
Aynı fikir engellerde de çalışır. Bir platform oyununda karakter bir duvara veya kutuya çarpınca ilerlemeyi durdurmak isteriz. Diyelim karakterin bir x hızı var ve sağa gidiyor:
sürekli tekrarla
x konumunu (x hızı) kadar değiştir
eğer <(Duvar) kuklasına değiyor mu?> ise
x konumunu ((x hızı) * -1) kadar değiştir
x hızı değişkenini 0 yap
Karakter duvara girerse önce son adımı geri alırız (x hızının tersi kadar geri götürürüz), sonra hızı sıfırlarız. Böylece karakter duvarın içinden geçmez, önünde durur. Çarpışma algılama, "iki nesne aynı yeri paylaşıyor mu?" sorusunu sormak ve buna göre tepki vermektir.
Mini uygulama
Kendi zıplayan karakterini yap. Şu adımları dene:
y hızıadında bir değişken oluştur.- Sahnenin altına yatay bir çizgi (zemin kuklası) çiz.
- Karakterin düşme + zemine çarpma programını kur (yukarıdaki "kukaya çarpınca dur" örneğine benzet).
boşluk tuşuna basıldığında y hızı değişkenini 8 yapbloğunu ekle.- Yeşil bayrağa tıkla ve boşluğa basarak karakteri zıplat.
Denemeler:
- Yerçekimini
-0.5yerine-1yaparsan ne değişir? - Zıplama gücünü 8 yerine 12 yaparsan karakter ne kadar yükselir?
- Zemine değince hızı 0 yerine
-3yaparsan (yani yukarı geri iterse) ne olur? Belki zıplayan bir top elde edersin.
Sık yapılan hatalar
Konumu değiştirmeyi unutmak
Sadece y hızını değiştirip y konumunu ... değiştir bloğunu koymazsan sayı değişir ama karakter kımıldamaz. Hız yalnızca bir sayıdır; onu her karede konuma uygulaman gerekir.
Hızı döngü içinde sıfırlamak
y hızı değişkenini 0 yap bloğunu yanlışlıkla sürekli tekrarla döngüsünün içine, koşulsuz koyarsan karakter hiç düşmez; hız her karede sıfırlanır. Sıfırlama yalnızca zemine değince yapılmalı.
Yerçekimini pozitif yapmak
y hızını pozitif bir sayı ile değiştirirsen (örneğin +0.5) karakter aşağı değil yukarı uçar. Yerçekimi aşağı çeker; bu yüzden değeri negatif olmalı.
Çarpışmayı çok geç kontrol etmek
Karakteri önce çok büyük bir adımla hareket ettirip sonra çarpışmayı kontrol edersen, karakter duvarın içine gömülebilir. Adımları küçük tut ve her adımdan sonra kontrol et.
Güvenlik notu
Bu ders tamamen ekran üzerinde, Scratch içinde çalışır; fiziksel bir tehlike içermez. Yine de ekran başında uzun süre kalmamaya dikkat et: her 30–40 dakikada bir kısa mola ver, gözlerini dinlendir ve biraz hareket et. Scratch projeni paylaşmadan önce bir yetişkinle birlikte gözden geçir; yorumlarda kişisel bilgilerini (adres, okul, telefon) yazma.
Ders özeti
- Hız, bir nesnenin her karede konumunu ne kadar değiştireceğini tutan bir değişkendir.
- Yerçekimi, her karede y hızını biraz azaltıp bu hızı konuma ekleyerek taklit edilir.
- Zıplama, y hızına aniden yukarı yönlü büyük bir değer vermektir.
- Çarpışma algılama, Algılama kategorisindeki
değiyor mu?bloğuyla yapılır ve hızı sıfırlayarak durmayı sağlar. - Küçük adımlar ve doğru sıralı kontroller nesnelerin duvara gömülmesini engeller.
Kontrol soruları
- Scratch'te "kare" ne demektir ve hız neden her karede uygulanır?
- Yerçekimini taklit etmek için
y hızını her karede artırmalı mı yoksa azaltmalı mı? Neden? - Zıplama sağlamak için hangi ana değişkene ne yaparız?
- Karakterin sonsuza kadar düşmesini hangi blok engeller ve hangi kategoridedir?
- Karakter duvarın içinden geçiyorsa iki olası nedeni nedir?
Cevaplar
- Kare, Scratch'in sahneyi bir kez yeniden çizmesidir; sahne saniyede birçok kez yenilenir. Hızı her karede uyguladığımız için hareket akıcı görünür ve zamanla hızlanma/yavaşlama oluşturabiliriz.
- Azaltmalıyız. y ekseni yukarıyı gösterdiği için hızı negatif yönde değiştirmek nesneyi aşağı çeker; bu yerçekiminin doğal etkisidir.
y hızıdeğişkenini pozitif bir sayı yaparız (örneğiny hızı değişkenini 8 yap). Yerçekimi sonra bu hızı yavaşça azaltır ve karakter yükselip geri iner.- Algılama (Sensing) kategorisindeki
değiyor mu?bloğu. Zemine değincey hızını 0 yaparak düşüşü durdururuz. - (a) Adım çok büyüktür, karakter tek karede duvarın içine girer; (b) çarpışma kontrolü yapılmıyor ya da çarpışınca hız sıfırlanıp geri alınmıyordur.
Kaynak ve doğrulama notu
“Basit Fizik: Hız, Yerçekimi ve Çarpışma” dersi için doğrulama odağı Hız: hareketin motoru ile Örnek: sağa doğru hızlanan top arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Blok adları Scratch’in güncel temel kategorileriyle uyumlu tutulmuştur. Proje davranışı; başlangıç, normal oyun, hata ve yeniden başlatma durumlarında ayrı ayrı denenmelidir.
Sonraki ders
Oyun Tasarımında Puan ve Seviye: Zıplayan karakterine puan, can ve zorlaşan seviyeler ekleyerek onu gerçek bir oyuna dönüştürüyoruz.