ActionScript 3.0: Analog Saat
Bu dersimizde Timer sınıfını kullanarak analog bir saat yapacağız. Bunun için gerekli olanlar;
- Üzerinde akrep, yelkovan, ve saniye kollarının olmadığı boş bir saat resmi
- Saati gösteren instance name’yi “saatKolu” olan bir movieclip
- Dakikayı gösteren instance name’yi “dakikaKolu” olan bir movieclip
- Saniyeyi gösteren instance name’yi “saniyeKolu” olan bir movieclip
Öncelikle Timer sınıfından “zamanlayici” adlı bir nesne oluşturuyoruz. Sonra bu zamanlayiciyi tetiklemek için bunu “TimerEvent.TIMER” olayına kaydediyoruz. Zamanlayici nesnesinin çalışması için ayrıca start() metodunu kullanmamız gerekiyor yoksa zamanlayici harekete geçmez.
var zamanlayici:Timer = new Timer(200);
zamanlayici.addEventListener(TimerEvent.TIMER,saatiCalistir);
zamanlayici.start();
saatiCalistir();
function saatiCalistir(event:TimerEvent = null):void {
var zaman = new Date();
var saniye:uint = zaman.getSeconds();
var dakika:uint = zaman.getMinutes();
var saat:uint = zaman.getHours();
saatKolu.rotation = Math.round((360 * (saat / 12)) + (30 * (dakika / 60)));
dakikaKolu.rotation = Math.round(360 * (dakika / 60));
saniyeKolu.rotation = Math.round(360 * (saniye / 60));
}
“zaman” adlı bir zaman nesnesi oluşturarak, getSeconds(),getMinutes() ve getHours() metotları ile zaman nesnesinin saniye, dakika ve saat bilgilerini elde ediyoruz. Bu bilgileri elde ettikten sonra analog saatimizin saniye,dakika ve saat kollarını zamana uygun olarak hareket etmesini sağlamamız gerekiyor. Bunun için saatKolu, dakikaKolu ve saniyeKolu adlı moviecliplerimizin “rotation” özelliklerini “saat”,”dakika” ve “saniye” değişkenlerine göre ayarlamalıyız.
Öncelikle bu üç movieclipte 360 derece tur atmak zorundadır. Burada dikkat etmemiz gereken konu; her birinin tur atma hızı farklı olmalıdır.
Diyelim ki; o an için zaman nesnesi saat=5 dakika=20; saniye=5 değerlerini aldı.
saatKolu.rotation = Math.round((360 * (saat / 12)) + (30 * (dakika / 60)));
formülümüze göre (360(5/12)+(30(20)/60))=160
saatKolu.rotation=160 derece dönecektir.
dakikaKolu.rotation = Math.round(360 * (dakika / 60));
formülümüze göre (360*(20/60))=120
dakikaKolu.rotation=120 derece dönecektir.
saniyeKolu.rotation = Math.round(360 * (saniye / 60));
formülümüze göre (360*(5/60))=30
dakikaKolu.rotation=30 derece dönecektir. ![]()
Bu örnekte dikkat edilmesi gereken en önemli bölüm şurasıdır:
saatiCalistir();
function saatiCalistir(event:TimerEvent = null):void
İlk olarak TimerEvent’i tetiklendiğinde saatiCalistir fonksiyonunun null değerini alması sağlanarak başlangıçta zaman bilgisinin alınması engelleniyor. Sonra ise tekrar saatiCalistir() fonksiyonu çağrılarak o anda zaman bilgisi alınarak analog saat çalışmaya başlıyor. Bu işlem, analog saat ilk anda çalışırken saniye kolunun meydana getirdiği saniye farkından oluşan olumsuz hareketi engellemektedir.
Uygulama Dosyası:analogsaat.rar
İşte size duvarınıza asabileceğiniz bir saat. Güle güle kullanın:)

Şubat 25th, 2010 at 03:37
Analog saat uygulamasını bir kaç ay önce yapmıştım ama bu uygulamaya gün ve ay bilgisini de girmek istiyorum ama bunu text alanına değil hazırlayacağım resimleri belirleyeceğim alana atayıp değer gününe/ayına göre ekrana gelmesini istiyorum ama nasıl yapacağım konusunda kafam biraz karıştı yardımcı olursanız sevinirim. Şimdiden çok teşekkürler.