21 Ocak 2012 Cumartesi

Ders-12 Flash'ta Matematik Konusu

Bu ders, benim size basit anlamda Flash anlatacagim son ders.Bu derste size, Flash’da yapacagimiz oyunlarda ve çesitli çalismalarda sikça kullanabileceginiz matematik kodlarini(fonksiyonlari) ve kullanim alanlarini anlatacagim.Bu dersten sonra, daha ders hazirlamayacagim.Zira bu son dersten sonra, simdiye kadar anlattigim toplam 10 dersi, çok iyi bir sekilde kavradiysaniz, siz de artik Flash Oyun Programciligina küçük bir adim atmissinizdir demektir.Daha ders hazirlamayacagim derken, hiçbir sey anlatmayacagim, her seyi birakiyorum anlamini çikarmayin.Mutlaka çesitli örnekler hazirlamaya devam edecegim,sordugunuz sorulara cevap vermeye çalisacagim.Sadece bu kadar dersi yeterli buluyorum. Bu dersleri kavramaniz durumunda, kendi kendinize rahatlikla oyunlar yapabilirsiniz (ama tabi “age of empires,crysis,counter strike gibi oyunlar yapmayi düsünmeyin). Çok alistirma yapmaniz gerekiyor.Parmaklarinizi kod yazmaya alistirmalisiniz. Neyse sözü fazla uzatmadan hemen çokça kullanilan matematik fonksiyonlari konusuna dönelim.



Flash'da Matematik Kodlari




Math.random();

Bu fonksiyon 0’dan 1’e kadar rast gele sayi üreten fonksiyondur (örnegin 0.2,0.9,0.5 gibi).

Eger 0’dan 1’e kadar degil de, 0’dan 100’e kadar rast gele sayi üretmek istiyorsaniz, bu fonksiyonu 100’e çarpmalisiniz ( Math.random()*100 ). Böylelikle 0’dan 100’e kadar rast gele sayi üretmis olursunuz.Örnegin asagidaki kodu, actions paneline yazarak deneyin ( Crtl+Enter ). Muhtemelen sonuç,bizde de oldugu gibi noktali bir deger çikacaktir.


var ornek:Number=Math.random()*100;

trace(ornek);






Bu kod ne isimize yarar diyorsaniz size cevabim sudur: Örnegin biz bu kodu oyunlarimizda kullanarak, eger çikan sonuç 20’den küçükse, canavari göstermesini saglayabiliriz veya 90’dan büyük çikarsa, düsmanin bize ates etmesini saglayabiliriz.Bu ve bunun gibi karar yapilari olusturabiliriz kisaca.


Math.floor();

Bu matematik fonksiyonu,kendi parantezi içine yazilan rakamlarin, varsa eger ondalikli degerlerini görmezden gelir.Yukaridaki örnekte hatirliyorsaniz ondalikli (noktali) deger çikmisti.Iste biz bu kodu kullanarak, bu ondalikli degeri silmis oluruz.Daha iyi anlayabilmeniz için yukaridaki örnegi su sekilde degistirip deneyin.


var ornek:Number=Math.floor(Math.random()*100);

trace(ornek);





Bu kod ne isimize yarar diyorsaniz size cevabim sudur: Örnegin biz Kim 500.000 ister yarisi gibi bir oyun yapmak istiyoruz.Ve elimizde toplam 20 soru var.Bu sorulari belli bir siraya göre degil de, karisik olarak,belli bir sirasi olmadan, yarismaciya(oyuncu) sormak isteyelim. Iste böyle bir sey yapmak istedigimizde, bu kodu kullanabiliriz.Örnegin çikan sonuç 20 ise yarismaciya 20.soruyu sor,çikan sonuç 5’ise 5.soruyu sor gibi.



Math.round();

Bu matematik fonksiyonu da,kendi parantezi içine yazilmis ondalikli sayilarin, ondalik kisimlarini en yakin oldugu sayiya yuvarlar.Örnegin rast gele ürettigimiz sayi “5.2” olsun.eger bu rakami “Math.round(5.2);” seklinde yazarsak,matematik kodumuz bunu ekrana 5 olarak yansitacaktir.Çünkü 5’e daha yakindir,6’ya daha uzak. “5.5” yazarsak ekranda “6” olarak gösterir. “5.7 veya 5.8,5.9 gibi” 6’ya daha yakin olan ondalikli sayilari yazarsak ekrana 6 olarak yansitacaktir.Örnegin asagidaki kodu önce 5.4 yazarak deneyin,ardindan 5.6 olarak yazip deneyin.Aradaki farki göreceksiniz.

var ornek:Number=Math.round(5.4);

trace(ornek);




Math.PI;

Bu kod da, bizim bildigimiz pi sayisini barindiran koddur ( 3.14…).Bu kodu asagidaki "sin,cos,atan2" kodlarinda kullaniriz.


Math.sin();

Bu kod, bizim y düzlemimizi(dikey düzlemi) kapsar.Biz bu kodu kullanarak,nesnemizin y düzlemde hareketini kontrol edebiliriz.Kullanim kalibi su sekildedir: “Math.sin(nesnenin_açisi*Math.PI/180)” dir.Bununla ilgili konu bitiminde bir örnek hazirlayacagim,o örnegi inceleyerek daha iyi anlarsiniz.

Math.cos();

Bu kod, bizim x düzlemimizi(yatay düzlemi) kapsar.Biz bu kodu kullanarak,nesnemizin x düzlemde hareketini kontrol edebiliriz.Kullanim kalibi su sekildedir: “Math.cos(nesnenin_açisi*Math.PI/180)” dir.Bununla ilgili konu bitiminde bir örnek hazirlayacagim,o örnegi inceleyerek daha iyi anlarsiniz.


Math.atan2();

Bu kod, bizim nesnemizin açisini denetler.Kullanim kalibi su sekildedir: “Math.atan2(birinci_nesne.y-ikinci_nesne.y,birinci_nesne.x-ikinci_nesne.x)” dir.Yani kisaca 2 farkli unsurun x ve y koordinatlarinin birbirinden çikarilmasi.Örnegin bu kodu kullanarak bir nesnenin(Movie Clip) açisini, bizim fareye göre degistirmeyi bu kodla yapabiliriz.Hemen bir örnek yapalim.Öncelikle bir tane kare çizin ve onu movie clip yapin.Instance name’sine de “kare” yazin.Ardindan asagidaki kodlari yazip çalistirin.


stage.addEventListener(Event.ENTER_FRAME,karenin_acisi);


function karenin_acisi(event:Event):void{

kare.rotation= (Math.atan2(mouseY-kare.y,mouseX-kare.x)) * (180/Math.PI);

}





Simdi daha iyi anladiginizi saniyorum.Farenin(mouse) x ve y koordinatiyla, karenin x ve y koordinatini birbirinden çikardik.Böylece fareyle kare arasindaki mesafesi hesaplamis olduk.Bunu da “kare.rotation” koduyla karenin açisina esitleyerek, istedigimizi yapmis olduk.


Simdi gel gelelim Math.sin() ile Math.cos koduyla ilgili örnek hazirlamaya.Yukaridaki örnege:

kare.x+=Math.cos(kare.rotation*Math.PI/180)*3
kare.y+=Math.sin(kare.rotation*Math.PI/180)*3




kodlarini ekleyerek tekrar çalistirin.Yani söyle olmali kodlar:



stage.addEventListener(Event.ENTER_FRAME,karenin_acisi);


function karenin_acisi(event:Event):void{

kare.rotation= (Math.atan2(mouseY-kare.y,mouseX-kare.x)) * (180/Math.PI);


kare.x+=Math.cos(kare.rotation*Math.PI/180)*3
kare.y+=Math.sin(kare.rotation*Math.PI/180)*3




}


Sonucu göreceksiniz. “kare.rotation= (Math.atan2(mouseY-kare.y,mouseX-kare.x)) * (180/Math.PI);
Koduyla önce karenin fareye göre dönmesini (açisini degistirmesini) sagladik.Ardindan:

kare.x+=Math.cos(kare.rotation*Math.PI/180)*3
kare.y+=Math.sin(kare.rotation*Math.PI/180)*3



kodlarini dahil ederek, karenin x ve y koordinatlarini,karenin açisina göre, sürekli fareye dogru 3 piksel hareket etmesini sagladik.3 yerine baska rakamlar yazabilirsiniz.Ama 0 yazmayin,aksi halde hiç hareket etmez. Daha iyi kavramak için önce “kare.y+=Math.sin(kare.rotation*Math.PI/180)*3” yi silerek örnegi tekrar çalistirip deneyin.Eminim ne ise yaradigini daha iyi kavramis olursunuz böylece.







Bu 12 Dersten Sonra Artık Flash Kullanabiliyorsunuz.Bundan Sonra Yapacağım Örnek Dosya Paylaşımı ve Dersler ile Flash Kullanımınızı Daha İleri Bir Seviyeye Taşıyacaksınız.


Not:Dersleri sırası ile takip edip,uygulayarak kavramaya çalışırsanız işiniz daha kolay olacaktır.Okumadan geçtiğiniz her kelime ileride sorun olacaktır.
Teşekkürler

1 yorum: