(” Tırnak) işaretlerini yenilemeniz gerekmektedir
Oyun yazımında hedefi otomatik bulan bir tank, ya da fareye göre açısını belirleyen bir tabanca yapmanız gerekebilir. Ben TCDD için yazdığım tren smülasyonunda makinist musluğu gibi kolların; fare işaretçisi ile çevirilmesinde ihtiyaç duymuştum..
Sizin için birbirinden farklı iki animasyon kodu kullandım. Biri ENTER_FRAME diğeri Timer sınıfı.
Bu uygulamada ayrıca kullanıcının fare işaretçisinin konumunu farklı amaçlarla kullanmayı öğreneceksiniz.
// Öncelikle kibritin farenin x ve y konumuna göre dönmesini sağlayacağız..
// Timer değişkeni tanımlıyoruz. Saniyenin “binde birinde” hızıyla çalıştırıyoruz..
var kibritTakipTimer:Timer = new Timer(1 /* Bahsi geçen binde bir bu değerdir */);
/* Bu timer değişkenine bir dinleyici iliştiriyoruz
ve çağırması gereken fonksiyonu yazıyoruz (kibritTakipFnk) */
kibritTakipTimer.addEventListener(TimerEvent.TIMER, kibritTakipFnk);
// kibritTakipTimer için bir dinleyici ekle (Zamanlayıvı olayı ekle, kibritTakipFnk fonksiyonunu çalıştırsın);
// Zamanlayıcı olayı olan bu fonksiyonun görevlerini yazıyoruz.
function kibritTakipFnk(event:TimerEvent):void {
// fonksiyon kibritTakipFnk (olay: Zamanlayıcı Olayı):boş (değer döndürme)
/* Bu kısmı ezberlemenize gerek yok. Matematiksel bir formüldür. Burada kibritin rotasyonunu fareyle iliştireceğiz
y2 - y1 ve x2 - x1 in arc tanjantını 180 ile çarpıp Pi sayısına bölerek,
fare işaretçimizin kibrite yaptığı açıyı buluyoruz ve “.rotation” komutu ile dönme olayını
bu açı değerine göre yaptırıyoruz. */
kibrit_mc.rotation = Math.atan2((mouseY - kibrit_mc.y),(mouseX - kibrit_mc.x)) * 180 / Math.PI;
/* kibrit_mc ‘nin rotasyonunu mouseY- kibrit_mc.y ve mouseX-kibrit_mc.x ‘in arc tanjantı * 180 / pi yani 3.14… şeklinde ayarla */
// uyari_text ve diğerlerine istediğimiz değerleri bu şekilde yazdırabiliriz. Math.floor(); küsüratları tam sayıya çevirir.
uyari_txt.text = (”Kibritin fareye göre açısı: ” + Math.floor(kibrit_mc.rotation));
uyari2_txt.text = (”Aralarındaki Y eksenindeki mesafe: ” + Math.floor(kibrit_mc.y - mouseY));
uyari3_txt.text = (”Aralarındaki X eksenindeki mesafesi: ” + Math.floor(kibrit_mc.x - mouseX));
}
// Zamanlayıcıyı direkt başlatıyoruz..
kibritTakipTimer.start();
/* Timer ‘dan başka bir örnekle devam etmeyi tercih ettik. Buradaki amacımız ise kibritin fare işaretçisine doğru yol alması
ENTER_FRAME; animasyonu “saniyede fps kadar” film şeridinde ilerletir.
Yani “document properties” belirlediğiniz saniyede gösterilmesi gereken ekran sayısı; fps */
// Bir dinleyici ekliyoruz. enterFrmFnk fonksiyonunu çağırıyoruz
addEventListener(Event.ENTER_FRAME,enterFrmFnk)
// Bahsettiğimiz fonksiyonu burada yazıyoruz.
function enterFrmFnk(event:Event) {
// kibritin y ekseni kibritin y ekseni - fare işaretçisinin y ekseninden / 15
// şeklinde yazdığım formül gittikçe daralan bir sayıyı vereceğinden
// kibrit fareye yaklaştıkça yavaşlıyor. / 15 sadece değeri küçültmek içindi..
kibrit_mc.y -= (kibrit_mc.y - mouseY) / 15;
// ve aynı şekilde x eksenleri için
kibrit_mc.x -= (kibrit_mc.x - mouseX) / 15;
}
//
www.mehmetoglu.org | Kaynak gösterilmeden yayınlanması ayıp ve yasaktır..
// Çalışan flash animasyon:
http://mehmetoglu.org/as3_dersler/fare_takip_ve_aci.swf// Çalışan proje dosyası(fla):
http://mehmetoglu.org/as3_dersler/fare_takip_ve_aci.fla