Bu örnekte sahne üzerinde bulunan iki nesnenin birbirine olan mesafesini ve açı değerini hesaplayacağız. Bu örrneği yapabilmek için Flash CS4 ve Flash Player 10 sürümü gerekmektedir. Ben örnekte sürekli birbirlerini kovalayan Tom ve Jerry karakterlerini kullandım. Örnekte kullanmak üzere sahne üzerine iki film klibi ekleyelim ve Proporties panelinde Instance Name kısımlarına kedi_mc ve fare_mc yazalım. Mesafe ve açı değişkenlerinden gelen verileri yazdırmak için bir dinamik text alanı oluşturalım ve Instance Name kısmına bilgi_txt yazalım. Son olarakta sahneye bir buton ekleyelim ve Instance Name kısmına tekrar_btn yazalım. Böylece butona her tıklandığında nesnelerin yerleri değişecektir.
İki nesnenin birbirine olan mesafesini hesaplamak için Math.sqrt() metotunu, açıyı hesaplamak içinse Math.atan2() metotunu kullanacağız.
Yukarıda belirttiğim tüm nesneleri sahneye eklediysek, artık kodlamaya geçebiliriz. Çalışma için gerekli olan kodlar aşağıdadır.
function tekrarla(e:MouseEvent) {
kedi_mc.x=150+Math.random()*450;
kedi_mc.y=150+Math.random()*300;
/* Nesneler arası mesafeleri hesaplamak için,
elde olan ikişer x ve y konumlarını değerlerini teke dşürüyoruz.
Bu işlemi bir fonksiyonun içerisinde gerçekleştirerek
işleme süreklilik kazandırıyoruz.
*/
function mesafe(x1:Number, y1:Number, x2:Number, y2:Number):Number {
var farkX:Number=x1-x2;
var farkY:Number=y1-y2;
//Sonra değerlerin karekökünü alınarak hesaplama işlemi sonlandırılır.
var fark:Number=Math.sqrt(farkX*farkX+farkY*farkY);
return fark;
}
var fark1:Number=mesafe(fare_mc.x,fare_mc.y,kedi_mc.x,kedi_mc.y);
//Nesnelerden değerleri aldık ve bu değerleri teke düşürdük.
//yani x ve y mesafelerini hesapladık. Radyan hesabını yapabilmek için
//Math.atan2() metodunu kullanıyoruz. Burada dikkat edilecek nokta ilk önce "y" değeri
//sonra "x" değerinin girilmesi gerektiğidir.
var aciRadyan:Number = Math.atan2((kedi_mc.y-fare_mc.y),(kedi_mc.x-fare_mc.x));
//Radyan olarak aldığımız değer açıya çeviriyoruz.
var aciDerece:Number=180*aciRadyan/Math.PI;
//geriye dönen açı değerinde 180 dereceden sonrası - olarak görüneceğinden dolayı
//değere 360 ekleyerek 180 ve sonrassı açılarıda dahil ediyoruz.
if (aciDerece<0) {
aciDerece+=360;
}
//alınan tüm değerleri dinamik metin alanına yazdırıyoruz.
bilgi_txt.text="Tom'un Jerry'ye mesafesi "+(Math.floor(fark1)).toString() + " piksel ve " + (Math.floor(360 - aciDerece)).toString() + " derecedir.";
//aci_txt.text = ((Math.floor(360 - aciDerece)).toString() + " derece");
//nesnelerin gelen açı değerine göre sahnede dönmelerini sağlıyoruz.
kedi_mc.rotation=aciDerece;
fare_mc.rotation=aciDerece-180;
//nesnelerin ters görünmemesi için nesneleri "x" ekseninde döndürüyoruz.
if (aciDerece>90||aciDerece<270) {
kedi_mc.rotationX=180;
fare_mc.rotationX=0;
}
if (aciDerece<90||aciDerece>270) {
kedi_mc.rotationX=0;
fare_mc.rotationX=180;
}
}


Son Yorumlar