Türkiye Online Medya Araştırması
Profili Göster

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./

aç-kapa İçeriğin rss beslemesi kullanımda değil Yorumlar

Profili Göster
Salih Dincer 24/02/2009

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...

aç-kapa Yazarın Diğer Yazıları

Makale

İlişkili makale bulunamadı.

yeni bir tane ekleyin

Haber

İlişkili haber bulunamadı.

yeni bir tane ekleyin

yeni üyelik | şifremi unuttum

aç-kapa 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ı

aç-kapa Yarışma 3. Uluslararası Ekslibris Yarışması: İstanbul 2010

3. Uluslararası Ekslibris Yarışması: İstanbul 2010

İstanbul Ekslibris Dernegi, Feyziye Mektepleri Vakfı ve Işık Üniversitesi, kitaplar için mülkiyet işareti olarak kabul edilen ve üzerinde estetik dege...
Kategori: Yarışma

aç-kapa Konferans Yeni Medya ve Etkileşim Konferansı 2010 - Marmara Üniversitesi

Yeni Medya ve Etkileşim Konferansı 2010 - Marmara Üniversitesi

Generally speaking, the term "New" brought about debates. We try to open up and elucidate the term "New" along with "Interact...
Kategori: Konferans

aç-kapa Konferans 3. Uluslararası Gelecek İçin Öğrenme Alanında Yenilikler Konferansı 2010: e-Öğrenme

3. Uluslararası Gelecek İçin Öğrenme Alanında Yenilikler Konferansı 2010: e-Öğrenme

Konferans ile ilgili ayrıntılı bilgiye aşağıdaki bağlantıdan ulaşabilirsiniz: http://www.futurelearning.org.tr/katilim_cagrisitr.pdf ...
Kategori: Konferans

üyeler Son Kahramanlar...

stats Kimler Burada? web stats

Son 1 dakika içinde MMIstanbul' da 52 (50 kayıtlı, 2 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:

ss34300 ...

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)

coldfusion mysql ubuntu
 
sponsor adobe istanbul