9 Mart 2015 Pazartesi

Corona SDK 3.Ders Lua Dilinde İlerliyoruz

  Ahmet Şimşek       9 Mart 2015 Pazartesi

Önceki dersimizde değişkenler ve operatörlerin ne işe yaradıklarını nasıl kullanıldıklarını gördük. Bu dersimizde kontrol yapılarını,fonksiyonları ve arrayları göreceğiz. Bunları kullanarak Corona SDK yı daha etkin kullanmaya bir adım daha yaklaşacağız.

Kontrol yapıları
Kontrol yapıları programımız üzerinde akışı kontrol etmemizi sağlarlar. Örneğin bir kare oluşturup kareye dokunduğumuz anda ve dokunmayı bıraktığımız anda neler olmasını belirleyecek bir yapı oluşturalım.

if,elseif,else
Bu kontrol yapısı ile yukarıda belirttiğimiz gibi akışı yönetebiliriz. Lua dilinde bu yapının syntax ini yukarıdaki örneğimizin kod hali üzerinde görelim. Bu örnekte ilerleyen derslerde görebileceğimiz nesneye fonksiyon ekleme gibi özelliklerinde kullanımını göreceğiz.

  1. local kutu = display.newRect(display.contentWidth/2,display.contentHeight/2,200,200)
  2. kutu:setFillColor(1,0,0)

  3. kutu:addEventListener("touch",function(e)
  4. if e.phase == "began" then
  5. print("kutuya dokundun")
  6. display.setDefault("background",1,1,1)
  7. elseif e.phase == "ended" then
  8. print("kutuya dokunmayi biraktin")
  9. display.setDefault("background",0,0,0)
  10. else 
  11. print("kutuya dokunulmuyor")
  12.                 display.setDefault("background",1,1,1)
  13. end
  14. end)

Yukarıdaki kodları simülatör üzerinde çalıştırırsanız ekranın tam ortasında kırmızı bir kutu göreceksiniz. Kutuya tıkladığınızda arkaplan beyaz olacak ve konsol ekranında "kutuya dokundun" yazacak. Kutuya dokunmayı bıraktığınızda arkaplanın siyah olduğunu ve konsolda "kutuya dokunmayi biraktin" yazdığını göreceksiniz. Eğer kutuya dokunmakta iken imleci kutunun dışına sürüklerseniz bu kez konsolda "kutuya dokunulmuyor" yazacak. Şimdi kullanmış olduğumuz kodları açıklayalım.

1. satırda display.newRect fonksiyonu ile bir kutu oluşturduk.
2. satırda kutumuzun rengini :setFillColor fonksiyonu ile belirledik.
4. satırda kutumuza özel "touch" fonksiyonunu belirledik. function(e) de ki e ile girdileri alıp işliyoruz.
5. satırda "if e.phase == "began" then" kodu ile kutumuza dokunulmaya başladığı anda ne olmasını istiyorsak onları belirliyoruz. "phase" Türkçesi aşama olan bir kelime. "began" da başlayan anlamına geliyor. Yani dokunulmaya başladığı anda bunu yapı kodlar ile anlatıyoruz.
7. satırda display.setDefault("background",1,1,1) ile arkaplan rengini belirledik.
8. satırda "elseif e.phase == "ended" then" kodu ile dokunmanın sona erdiği anda çalışmasını istediğimiz kodları yazacağımız kısmı belirliyoruz.
11. satırda ise else ile dokunma yoksa ne olması gerektiğini yazacağımız kısmı belirleyip kodlarımızı sonlandırıyoruz.

if,elseif,else in ana kod yapısı bu şekilde. Çok daha kısa bir açıklama ile if kısmı yalnızca 1 yani true değerlerde çalışır. Eğer akış sırasında sınamak istediğiniz başka bir aşama var ise elseif i eklersiniz. Akış sırasında if ve elseif kısımları çalışmaz ise ne olacağını else kısmında belirleriz.

if "kontrol_edilecek_kısım" then

elseif "kontrol_edilecek_diger_kısım" then

else

end

print

Sadece true olduğunda çalışır kısmını daha net anlayabilmek için print(1>0) yazıp konsolu kontrol ederseniz true döndüğünü görürsünüz eğer print(0>1) yaparsanız false döndüğünü görürsünüz. Yani bu sınamaların sonuçları ya true ya da false olduğundan tüm akış bunlar üzerinden kontrol edilir.

Döngüler
Basit ve klasik bir örnek ile başlayalım. Ekranda 10 tane kutu oluşturacağımızı düşünelim. Bunu farklı yollarla oluşturabiliriz. Alt alta yazarak oluşturabiliriz mesela. Yada while ve for döngülerinden birini kullanarak bir kaç satırda 10 satırlık yada 100 hatta 1000 satırlık işlemin yapılmasını sağlayabiliriz.



İlk olarak while döngüsünü görelim.

while döngüsü
while döngüsünün ana kod yapısı aşağıdaki şekilde;

while kontrol_kısmı do
      yapılacaklar
end

Örneğimizde belirttiğimiz gibi 10 tane kareyi yanyana oluşturalım.

  1. local i = 1
  2. while i < 10 do
  3. local kutu = display.newRect(50*i,100,50,50)
  4. kutu:setFillColor(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255)
  5. i = i + 1
  6. end

1. satırda i değişkenimizi oluşturup 1 değerini atadık.
2. satırda while döngümüzü oluşturup i sayısının 10 dan her küçük olduğunda döngünün devam etmesini istediğimizi belirttik.
3. kutumuzu oluşturduk ve kutu konumlarının yanyana olabilmesi için "50*i" yazdık ki her kutu sırası ile 50,100,150.. diye devam etsin ve sıralı olarak görebilelim.
4. kutumuzun rengini belirledik. math.random fonksiyonu ile rastgele renk oluşturduk.
5. bu kısımda dikkat etmeniz gereken nokta i nin arttırılması. Diğer programlama dillerinde i++ yada ++i şeklinde arttırma operatörleri lua dilinde mevcut değil. Yani arttırma işlemini "i = i + 1" şeklinde yapıyoruz. i yi 1 arttırıp çıkan sonucu i ye atıyoruz.

for döngüsü
for döngüsünün ana kod yapısı ise şu şekilde;

for deger=0,10 do
      yapılacaklar
end

deger kısmı yerine istediğiniz bir kelime yazabilir ve değere istediğiniz bir sayıyı atayabilirsiniz.

Kutularımızı bu kezde for döngüsü ile oluşturalım.

  1. for i=1,10 do
  2. local kutu = display.newRect(50*i,100,50,50)
  3. kutu:setFillColor(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255)
  4. end

1. satırda i değişkenimize 1 atayıp 10 a kadar devam etmesini sağladık.
Alt satırlarda ne olduğundan yukarıda bahsettik. Ve for döngümüz işleme koyulup i 10 olana kadar 1 artarak çalıştı.

while ile for döngüsünün kullanımı sizin tam olarak ne yapmak istediğinize kalmış. Döngünün sabit olarak 1 arttırılıp işleme koyulacağı bir döngü için for,döngünün 2 şer 2 şer yada 10 ar 10 ar artacağı bir döngü için while kullanabilirsiniz. Seçim sizin.

Döngülerde break ve return kullanımı
Döngülerde break ve return ile istediğiniz bir işlemle döngüyü kesebilir yada bir işlemin yapılmamasını sağlayabilirsiniz. Örneğin 1 den 10 a kadar sayıları konsola basan kodlarda break ve return kullanımlarını inceleyelim.

for
for i=1,10 do
if i == 5 then
break
end
if i == 3 then
  return
end
print(i)
end


while
local i = 1
while i < 10 do
if i == 5 then
break
end
if i == 3 then
return
end
print(i)
i = i + 1
end


Kodlar üzerindede gördüğünüz gibi break ile döngüye son veriyor,return ile istenen yerde döngünün çalışmadan atlamasını sağlıyoruz.

Fonksiyonlar
Fonksiyonlar adındanda anlaşılacağı üzere istediğimiz şekilde çalışan parametreler alıp bunları kendi içinde işleyebilen yapılardır. Örneğin 3 parametre alan bir fonksiyon oluşturup ilk iki parametreyi çarpıp üçüncü parametreyi bu çarpım ile toplayıp konsola yazdıran bir fonksiyon yazalım.

function yaz(a,b,c)
print(a*b+c)
end

yaz(1,2,3)


Fonksiyonu çalıştırıp konsolu kontrol ederseniz 5 yazdığını görürsünüz.

Şimdide daha işimize yarayacak şekilde geliştirmek istediğimiz bir oyunu baz alarak fonksiyonları anlatmaya çalışalım. Oyunumuzda her nesnenin kendine özel bizim belirleyebileceğimiz fonksiyonları olabilir. Mesela yeşil bir kutu oluşturup kutuya tıkladığımız anda kutumuzun bir miktar ileriye doğru kaymasını isteyelim. Bunun için örnek bir fonksiyon oluşturalım.

  1. local kutu = display.newRect(display.contentWidth/2,display.contentHeight/2,100,100)
  2. kutu:setFillColor(0,1,0)

  3. function ileriye_git(e)
  4. transition.to(kutu,{ x = e.x + 100, time = 500 })
  5. end

  6. kutu:addEventListener("touch",ileriye_git)
Kodlarımızda bazı kısımlara ilerleyen derslerde değineceğiz şu an fonksiyonların ana mantığını anlamak maksadı ile örneğimizi inceleyelim.

4. satırda oluşturmuş olduğumuz ileriye_git fonksiyonu ve bu fonksiyondaki e parametresi ile kutumuzu mevcut konumunun 100 birim ötesine gitmesini sağladık.

Bu dersimizde kontrol yapılarınının,döngülerin ve fonksiyonların Lua dilinde nasıl kullanıldığını basit örnekler ile anlatmaya çalıştık. Derslerin daha çok kişiye erişmesi ve daha faydalı olabilmesi adına yorumda bulunur ve paylaşırsanız çok sevinirim. Her tür soru,öneri ve eleştiriniz için iamaroott@gmail.com adresinden ulaşabilir yada yorum atabilirsiniz. Sonraki derste görüşmek üzere.


logoblog

Thanks for reading Corona SDK 3.Ders Lua Dilinde İlerliyoruz

Previous
« Prev Post

3 yorum:

  1. Derslerin devamı gelsin lütfen

    YanıtlaSil
  2. corona sdk oyun yapmak için çok güzel bir dil fakat kamera sisteminin olmaması bezdirici.

    YanıtlaSil
    Yanıtlar
    1. Evet corona sdk ile birlikte sunulan bir plugin maalesef yok ama şu kütüphane işinizi görebilir https://gist.github.com/GymbylCoding/8675733. şu oyunda kullanmıştım https://www.youtube.com/watch?v=SKdIssKW49Q gayet iyi çalışıyor.

      Sil