AS3 - Movie Kliplere Dışarıdan Kod Atamak
enis yugnak Tarih: 14/02/2009 Yorum: 1 adet
Okunma : 1467 Tutanlar: Bu yazıyı 6 kişi tuttu.
Selamlar, sahnemizde bulunan bir klip, örneğin 25. frame e geldiğinde bir kod tetikletmek istiyoruz. bilinen en kolay yolu, 25. frame e gidip, bu klibin timelineına kodlarımızı yazmak. peki ya sahnemizdeki kliplere tek satır kod yazmak istemiyorsak? işte bunu yolu addFrameScript kodu.
Tüm kodlarımızı tek timelineda yazarak işi bitirmek istemez miyiz hepimiz?
Actionscript 3.0 ile artık timeline' a çok dokunmasak bile, bu metodu hem class dosyalarımızda hem de timeline da kullanmak mümkün. Özellikle timeline animasyonlu işlerde son derece kullanışlı olacak.
örneğimizi incelemek için öncelikle;
- sahnemize w:50px h:20px büyüklüğünde bir klip çizip movieclibe çevirelim. Modify / Convert to Symbol (F8)
- klibimizi sahneye koyalım, örneğin x: 10 gibi
- bu klibimizide tekrar klibe çevirelim, ismine hareketMc diyelim. (sahne üstünde instancename vermeyi de unutmayın)
- şimdi klibimizi açalım, 100. frame'e keyframe koyalım. (100. frame e tıklayıp (F6) ya basabilirsiniz.)
- 100. frame deki klibi sahnenin en sonuna taşıyalım.
- yeni bir layer ekleyelim, yeni ekledigimiz layer da ilk frame'e "oyna" ismini verelim
- 50. frame e gidip f6 ya basalım, ve bu frame'e de isim verelim. "ilkdurak"
- aynı sekilde 100. frame e gidip isim verelim "sondurak"
- ve klipten çıkalım, (root timelinedayız)
- (ctrl-enter) ile kontrol ettiğimizde, göreceğimiz şey çizdiğimiz objenin sahnenin başından sonuna dogru yavasça gidiyor olması. bu arada biraz daha güzel bir geçiş isterseniz frame rate i 30 yapabilirsiniz.
şimdi kodumuzu biraz inceleyelim.
yukarıda da bahsettiğim gibi addFrameScript kodu, bir klibin istediğimiz frame ine kod atamaya yarıyor, örneğin; (bu kodu root timeline a yazıyoruz, hareketMc nin içine değil.)
1. tek bir frame e kod atamak
hareketMc.addFrameScript (49, animasyonBasaDonsun);
function animasyonBasaDonsun ():void {
hareketMc.gotoAndPlay(1);
}
yukarıdaki kodu test ederseniz, klibimizin 50. frame e kadar gidip başa döndüğünü göreceksiniz.
burada dikkatinizi çeken birşey olabilir, 50. frame e kod atamak için 49 yazıyoruz, index numaralandırma yüzünden, frame numaraları da 0 dan başlıyor, buna dikkat.
2. birden fazla frame'e kod atamak
bunu yapmanın iki yolu var, isterseniz aynı kod içinde arka arkaya frameleri sıralayabilirsiniz,
hareketMc.addFrameScript (49, frameAd, 99, animasyonDursun);
ya da alt alta belirleyebilirsiniz.
hareketMc.addFrameScript (49, frameAd);
hareketMc.addFrameScript (99, animasyonDursun);
function frameAd ():void {
trace ("frame 50");
}
function animasyonDursun ():void {
hareketMc.stop ();
trace ("animasyon durdu");
}
-yukarıdaki kodu denediğinizde göreceksiniz ki, klibimiz 50. frame e geldiğinde "frame 50" trace ediliyor ve 100. frame de klibimiz duruyor ve "animasyon durdu" trace ediliyor.
3. atadığımız kodu iptal etmek
kodları bu şekilde atamak guzel, peki ya iptal etmek istersek, bunun da yolu basit, daha onceden kod atadıgımız frame numarasına tekrar kod atar gibi uyguluyoruz, ancak fonksiyon ismi yerine null yazıyoruz. şu şekilde;
hareketMc.addFrameScript (49, null);
hemen ufak bir uygulama yaparak test edelim.
hareketMc.addFrameScript (49, animasyonBasaGitsin);
hareketMc.addFrameScript (99, animasyonDursun);
function animasyonBasaGitsin ():void {
hareketMc.gotoAndPlay (1);
hareketMc.addFrameScript (49, null);
}
function animasyonDursun ():void {
hareketMc.stop()
}
yukarıdaki kodun yaptığı işlemi anlamışsınızdır, klibimiz 50. frame e geldiginde animasyonBasaGitsin fonksiyonu çalışıyor, boylece klibimiz başa gidiyor, aynı zamanda da 50. frame icin atanmıs kodu iptal ediyor. böylece ikinci kez 50. frameden gecerken başa dönmeyip yoluna devam ediyor. 100. framede de duruyor, hadi ctrl-enter.
4. kodları frame ismine atamak
böyle guzel bir özelliği öğrenmek biz meraklı ve yaratıcı insanlara yetmiyor tabiki, hep daha fazlasını istiyoruz, ve soruyoruz, peki frame ismine gore kod atayamıyor muyuz? bu soru benim de aklıma geldi ve ufak bir arastırma yaparak başka bir meraklının çözümüne ulaştım.
kodları yazdıgımız frame e su kodu eklemek isimizi gorecek:
function addFrameBehaviour (klip : Object, frame : String, behaviour : Function ):void {
var labels : Array = klip.currentLabels;
for (var i : int = 0; i < labels.length; i ++) {
if (labels [i].name == frame) {
klip.addFrameScript (labels [i].frame - 1, behaviour);
}
}
}
bundan sonra yukarıdaki ornegimizi aynen frame isimleri ile uygulayabiliriz
addFrameBehaviour (hareketMc,"ilkdurak", animasyonBasaGitsin);
addFrameBehaviour (hareketMc,"sondurak", animasyonDursun);
function animasyonBasaGitsin ():void {
hareketMc.gotoAndPlay ("oyna");
hareketMc.addFrameScript (49, null);
}
function animasyonDursun ():void {
hareketMc.stop()
}
çok hoş değilmi.
5. atadığımız fonksiyona parametre atamak
evet, gerçekten de başka bir meraklı arkadaş bunun çözümünü de bulmuş.
bunu yapabilmek için öncelikle yeni bir as3 class dosyası açıyoruz, ve aşağıdaki kodu ekliyoruz,
package
{
public class Delegate
{
public static function create(handler:Function,...args):Function
{
return function(...innerArgs):void
{
handler.apply(this,innerArgs.concat(args));
}
}
}
}
bu dosyayı Delegate.as diye kaydedip kapatabiliriz. sonrasında flash dosyamızda, ilk frame e şu kodları ekleyerek testimizi yapabiliriz,
hareketMc.addFrameScript (39, Delegate.create(isimYazdir,"40. framedeyiz","harika"));
function isimYazdir (yazi1:String,yazi2:String):void {
trace (yazi1);
trace (yazi2);
}
yukarıdaki örnekte de gördüğünüz gibi birden fazla parametre göndermek mümkün.
bundan sonrası sizin yaratıcılığınıza kalmış.
Not: örnekleri ekte bulabilirsiniz.
iyi çalışmalar
SelfLearner./
Makale
İlişkili makale bulunamadı.
Haber
İlişkili haber bulunamadı.
Etkinlikler
Toplantı
Özgür Yazılım ve Linux Günleri '10
Özgür Yazılım ve Linux Günleri '10
İstanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü ve Linux Kullanıcıları Derneği'nin 9 yıldır düzenlemekte oldukları etkinlikler bu yıl `Özgür Y...
Kategori:
Toplantı
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 52 (50 kayıtlı, 2 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Blog Bölümü Blogevi.com'a Taşınıyor
Selam arkadaşlar MMIstanbul'da , tasarımcı ve programcıların blog yazılarını "feedleyerek" MMIstanbul okurlarını MMIstanbul dışın ...
7.500'üncü üyemiz Cem Koç!
Neler Yapılabilir?
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)










Bunu bilmiyordum!
Çok faydalı bir makale, elinize sağlık...
AS3'e başladığımdan beri hep tek frame ile işimi bitirmeye çalışırdım. Ama bazen frame'ler arasına küçük komutlar koymak hala çok kolayıma gelir. Elbette Flash bir programlama yazılımı değil. Onun tüm olanaklarını kullanarak tasarım yapmak çok verimli geçecektir. Bu statik tasarım yöntemini, anlattıklarınız ile dinamik bir hale getirmek Flash'ı daha dinamik bir uygulama olmasını sağlayacak.
Teşekkürler...