Fareyi Takip Eden Sembol, Hareket Kodlamak, ve ActionScript 3 ‘te Açı Kullanımı
(” 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

Ağustos 19th, 2009 at 10:36
Kodların arasında anlatım yapman çok güzel olmuş. Ellerine ve emeğine sağlık.
Mart 3rd, 2010 at 20:04
teşekkür ederim
Mart 3rd, 2010 at 20:05
Ben teşekkür ederim.