Scratch klonlarında değişkenler nasıl ayrı tutulur sorusunun temel cevabı, her verinin kapsamını doğru seçmektir. Kimlik ve can gibi yalnızca tek düşmana ait bilgiler için değişken oluştururken Yalnızca bu kukla için seçeneğini, bütün oyunun paylaşacağı skor gibi değerler için Tüm kuklalar için seçeneğini kullanırsın.
Bir kukla, sahnedeki özgün oyun nesnesidir. Klon ise bu kukladan proje çalışırken üretilen ayrı bir oyun nesnesidir. Bu ayrım doğru kurulmadığında bir düşmana verilen hasar diğerlerini de etkileyebilir veya bütün klonlar aynı kimliği okuyabilir.
Klon başına değer ile ortak değer arasındaki fark
Değişken oluştururken seçtiğin kapsam, değerin kim tarafından paylaşılacağını belirler. Yalnızca bu kukla için seçilen değişkenin özgün kuklada ve onun klonlarında ayrı kopyaları bulunur. Bir klonun kendi kopyasında yaptığı değişiklik, diğer klonların aynı adlı değişkenini değiştirmez. Klon oluşturulduğu anda kaynak kukladaki değer, klonun başlangıç değeri olur.
Tüm kuklalar için seçilen değişkende ise proje genelinde ortak bir değer bulunur. Farklı kuklalar ve klonlar bu değeri okuyabilir, değiştirebilir ve aynı güncel sonucu görür. Bu yüzden genel skor, bölüm puanı veya toplam toplanan nesne sayısı gibi değerlerde bu seçim kullanılabilir.
| Değer türü | değişken seçimi | beklenen davranış |
|---|---|---|
| Kimlik | Yalnızca bu kukla için | Klon oluşturulmadan önce verilen kimlik, o klonun kendi değerine dönüşür. Bir klonun kimliği diğerlerini etkilemez. |
| Can | Yalnızca bu kukla için | Hasar alan klonun canı azalır. Diğer düşman klonlarının canı aynı kalır. |
| Ortak skor | Tüm kuklalar için | Kuklalar ve klonlar aynı skor değerini okur ve değiştirir. |
Buradaki kritik nokta, ortak bir sayaçtan kimlik okumaya çalışmamaktır. Kimlik değişkenini Tüm kuklalar için oluşturursan her klonun ayrı kimliği oluşmaz. Klon başladıktan sonra ortak değişkenin değeri değişirse klonlar kendi eski kimliklerini değil, ortak değişkenin o andaki tek değerini okuyabilir. Kimlik ve can bilgisi bu nedenle klona özel değişkenlerde tutulmalıdır.
Kukla, klon ve “klon olarak başladığımda” bloğu nasıl ilişkilidir?

Kaynak kuklayı bir kalıp gibi düşünebilirsin. Klon oluşturulduğunda bu kuklanın kostüm, ses, kod ve değişken özelliklerini başlangıç noktası olarak kullanır; fakat sahnede ayrı bir oyun nesnesi gibi davranır. Scratch'te klonlarla ilgili kodları ayırmak için klon olarak başladığımda olay bloğu kullanılır.
Bu blok, yeni klon kendi yaşamına başladığında çalışır. Aynı blokta yazan komutlar her klon için ayrı bağlamda yürütülür. Böylece klon görünür olabilir, kendi konumuna gidebilir veya kendi başlangıç değerlerini kullanabilir. Özgün kukla ise klon olarak başladığımda akışını kendisi için çalıştırmaz; bu olay bloğu yalnızca klonların başlangıç komutlarını tanımlar.
Yeşil bayrak tıklanınca
gizlen
[kendim v] klonunu oluştur
Klon olarak başladığımda
x: (100) y: (0) konumuna git
görün
[Ben bir klonum] de (2) saniye
Beklenen sonuç şudur: Özgün kukla gizlenir, oluşturulan klon sahnede x: 100 ve y: 0 konumunda görünür ve konuşma balonunu gösterir. Aynı başlangıç akışıyla oluşturulan her yeni klon, bu komutları kendi bağlamında yürütür; bir klonun konumu veya klona özel değişkeni diğer klonun kopyasına dönüşmez.
Üç düşman klonunu farklı kimlik ve canla oluşturma sırası

Üç düşmanı aynı kukladan üretmek için önce değişkenlerin kapsamını doğru seç. Kimlik ve Can değişkenlerini yalnızca bu kukla, Sıradaki Kimlik değişkenini ise tüm kuklalar seçeneğiyle oluştur. Böylece ilk iki değişken her klonda ayrı değer tutar, sayaç ise yeni klona verilecek kimliği belirlemek için ortak kalır.
Yerel değişkenlerin değeri, klon oluşturulduğu anda klona aktarılır. Bu nedenle her üretimde önce Sıradaki Kimlik değerini Kimlik değişkenine aktarmalı, ardından o klonun Can değerini ayarlamalı ve en son klonu oluşturmalısın.
YEŞİL BAYRAK TIKLANDI
gizle
[Sıradaki Kimlik] değerini (1) yap
[Kimlik] değerini (Sıradaki Kimlik) yap
[Can] değerini (3) yap
[kendimin klonunu oluştur]
[Sıradaki Kimlik] değerini (1) artır
[Kimlik] değerini (Sıradaki Kimlik) yap
[Can] değerini (5) yap
[kendimin klonunu oluştur]
[Sıradaki Kimlik] değerini (1) artır
[Kimlik] değerini (Sıradaki Kimlik) yap
[Can] değerini (4) yap
[kendimin klonunu oluştur]
[Sıradaki Kimlik] değerini (1) artır
KLON OLARAK BAŞLADIĞIMDA
göster
eğer <(Kimlik) = (1)> ise
x: (-160) y: (80) konumuna git
değilse eğer <(Kimlik) = (2)> ise
x: (0) y: (80) konumuna git
değilse
x: (160) y: (80) konumuna git
end
İlk klon oluşturulurken yerel değerler Kimlik 1 ve Can 3 olarak kopyalanır. Sayaç bir artırıldıktan sonra ikinci klon Kimlik 2 ve Can 5, üçüncü klon ise Kimlik 3 ve Can 4 değerleriyle oluşturulur. Önemli: Klon başladıktan sonra Kimlik'i ortak sayaçtan okumaya çalışma. Kimlik değeri, klon oluşturulmadan önce yerel değişkene aktarılmış olmalıdır.
Seçilen klonun canını azaltma ve sonucu kontrol etme
Kimlik değerini kontrol eden klon olarak başladığımda akışı, üç düşmanı farklı konumlara yerleştirir. Bu blok, klon oluşturulduğu anda çalışır.
Bu kukla tıklandığında akışını aynı kuklaya ekleyerek yalnızca tıklanan klonun yerel Can değerini değiştirebilirsin. Scratch'in klon örneklerinde de tıklanan klon üzerinde işlem yapılıp ardından bu klonu sil bloğu kullanılır.
Candeğerini 1 azalt.Can = 0isebu klonu silbloğunu çalıştır.- Can sıfıra ulaşmadıysa ekranda
Kimlikve kalanCandeğerini göster.
Kontrol için başlangıç değerleri sırasıyla 1/3, 2/5 ve 3/4 olmalıdır. 2 numaralı klona bir kez tıkladığında yalnızca onun Can değeri 5'ten 4'e iner. 1 numaralı klon 3, 3 numaralı klon ise 4 Can değerini korur. Bu tür uygulama adımlarını geliştirmek için Scratch ve programlama üzerine diğer anlatımlara göz atabilirsin.
Ortak Can değişkeni kullanılırsa ne değişir?
Üç düşmanın canını ayrı ayrı takip etmek için Can değişkenini “yalnızca bu kukla” seçeneğiyle oluşturmalısın. Böylece her klon kendi Can değerini taşır. Tıklanan klonun Can değeri azalırken diğer klonların değerleri korunur. “Tüm kuklalar” seçeneğinde ise tek bir ortak değer bulunur ve bütün klonlar aynı Can değerini okur.
Yerel Can değerleri sırasıyla 3, 5 ve 4 olan üç klondan ikinciye tıklanıp bir can azaltılırsa sonuçlar 3, 4 ve 4 olur. Can değişkeni “tüm kuklalar” seçeneğiyle oluşturulmuşsa klonların ayrı başlangıç değerleri bulunmaz. Herhangi bir klon Can değerini değiştirdiğinde diğer klonlar da değişen ortak değeri görür.
Sayaç ile Kimlik farklı görevler üstlenir. Tüm kuklalar için oluşturulan Sayaç artırılır, ardından klon oluşturulmadan önce Kimlik ve başlangıç Can değeri ayarlanır. Sonra kendimin klonunu oluştur bloğu çalışır. Klon, kendi davranışını klon olarak başladığımda bloğuyla başlatır. Bu sırada Kimlik yerine ortak Sayaç okunursa klonun kendisine ait numarası alınmaz. Sayaç o anda hangi değere geldiyse o ortak değer okunur ve başka klonların işlemlerinden etkilenebilir.
Sayaç: tüm kuklalar
Kimlik, Can: yalnızca bu kukla
yeşil bayrak tıklanınca
[Sayaç v] değerini (1) artır
[Kimlik v] değerini (Sayaç) yap
[Can v] değerini (3) yap
[kendimin klonunu oluştur]
klon olarak başladığımda
göster
bu kukla tıklanınca
[Can v] değerini (-1) değiştir
Bu örnekte klon Kimlik 1 ve Can 3 ile başlar. Klona tıklandığında yalnızca onun Can değeri 2 olur. Aynı sıra diğer klonlar için 2 ve 5, 3 ve 4 değerleriyle tekrarlanır.
- Kapsam: Kimlik ve Can “yalnızca bu kukla”, Sayaç “tüm kuklalar” olarak mı oluşturuldu?
- Sıra: Sayaç artırıldıktan sonra Kimlik ve Can, klon oluşturulmadan önce mi ayarlandı?
- Başlangıç: “Klon olarak başladığımda” içinde ortak Sayaç yerine yerel Kimlik mi okunuyor?
- Tıklama: Can değerini azaltan blok, tıklanan klonun kodunda mı çalışıyor?
- Kontrol: Başlangıç değerleri Kimlik 1, Can 3; Kimlik 2, Can 5; Kimlik 3, Can 4 olarak görünüyor mu?
Sık Sorulan Sorular
Scratch'te bir değişkeni klonlara özel yapmak için hangi seçenek seçilir?
Değişken oluştururken “yalnızca bu kukla” seçeneği seçilir. Bu seçenek, aynı kuklanın klonlarının değişken değerlerini birbirinden ayırır.
Kimlik ve can değerleri neden klon oluşturulmadan önce ayarlanır?
Klonun kendisine ait başlangıç bilgilerini alması için Kimlik ve Can değerleri oluşturma bloğundan önce hazırlanır. Böylece her klon kendi değerleriyle başlayabilir.
Bir klonun canı azalırken diğer klonların canı neden değişmez?
Can değişkeni “yalnızca bu kukla” olarak oluşturulduğunda her klonun ayrı Can değeri bulunur. Bir klondaki değişiklik diğer klonların ayrı değerlerini etkilemez.
Kimliği ortak sayaçtan klon başladıktan sonra okumak neden sorun çıkarabilir?
Ortak Sayaç bütün kuklalar tarafından paylaşılır. Klon daha sonra Sayaç değerini okuduğunda bu değer onun kendi kimliği değil, sayaçta o anda bulunan ortak sayı olabilir.
Değişken kapsamını ve atama sırasını doğru kurduğunda, her klon kendi kimliğini ve can değerini bağımsız biçimde takip edebilir.