Actionscript 3.0 ve Display List
Engin Yöyen Tarih: 2/01/2008 Yorum: 1 adet
Okunma : 548 Tutanlar: Bu yazıyı 2 kişi tuttu.
Actionscript 3 yapılan her uygulamada görüntülenen görsel elementler display list adındaki bir hiyerarşide toplanıyor.Yani bütün görsel öğeler display list te toplanıyor.Bu hiyerarşide yer alan objeler z-sıralama sistemine göre pozisyon alıyor.Bu makalede display list’e nasıl movie clip, shape, sprite, text area vb objeleri ekleyip çıkarabileceğinizi, ekrandaki öğelerin z-sıralamasını nasıl yapabileceğinizi, ayrıca Actionscript 2 de sıkça kullanılan attach movie, createMovieClip, duplicateMovieClip, gibi artık kullanılmayan komutlara da değineceğim .Kaynak kodların tamamına sayfanın en altından ulşabilirsiniz.
addChild() ve new() metodları
Actionscript 3 te yeni bir obje oluşturma için new metodu kullanılır.Bu metodla sadece movie clip değil ses, video, componentler vb birçok öğeyi oluşturabilirsiniz, hatta kütüphanenizde duran bir öğeye linkage id vererek o objeyi bile kütüphaneden çağırabilirsiniz.Ama önce bir örnekle yeni bir movie clibi nasıl oluşturabileceğimize bir bakalım.
var my_mc:MovieClip = new MovieClip();
Kodda da açıkça görüldüğü gibi çok basit. Yeni bir movie clip oluşturmak çok basit ama biz sadece movie clibi oluşturduk bu movie clibi ekrana yani display list’imize eklemek için ise addChild metodunu kullanmamız gerekiyor.
addChild(my_mc);
Şimdi kütüphanede yer alan bir movie clibi nasıl kullanabileceğimize bakalım. İlk olarak kütüphaneden ekrana eklemek istediğiniz movie clibin üzerine sag tıklayın ve Linkage i seçin.

Önünüze gelen pencerede Export for ActionScript seçeneğini seçin.

Daha sonra Class bölümüne movie clibinize vermek istediğiniz class adını seçin, ve OK tuşuna basın.

Önünüze gelen hata mesajı, verdiğiniz movie clibe ait bir class yapısının olmadığı için hata veriyor.OK derseniz bu class ait bir class yapısını flash oluşturacaktır, bu bölümü atlayıp OK tuşuna basıyoruz.

Şimdi timeline daki ilk boş frame tıklayıp actionscript panelini açın ve aşağıdaki kodu yazın
var p1_mc:pickman = new pickman();
p1_mc.x=150;
p1_mc.y=150;
addChild(p1_mc);
Buradaki mantık aslında çok basit kütüphanenizde yer alan bir öğeye var olan bir class gibi davranıyorsunuz. Kulağa zor geliyor ama o kadar zor değil.
Sprite()
Sprite’ları timeline’ları olmayan movieclipler gibi düşünebilirsiniz, avantajı ise vector grafikler gibi objeler için daha az yer kaplamasıdır.Kullanımı ise MovieClip ile aynı;
var my_sprite:Sprite = new Sprite();
addChild(my_sprite);
Kütüphanedeki bir movieClip öğesine Sprite şeklinde davranmak istiyorsanız yapmanız gereken linkage identifer bölümünden class ın altındaki Base Class bölümünde ;
![]()
flash.display.MovieClip base clasını flash.display.Sprite yapmanız.Burada kütüphanedeki obje için temel class seçiyorsunuz, bu da seçtiğiniz classın özelliklerini taşıyacaktır demektir.
addChildAt();
Bu metod ile ekrana eklemek istediğiniz objenin index numarasına belirterek objeyi ekrana ekliyorsunuz .
addChildAt(my_mc, 3);
contains();
Contains metodu bir objenin başka bir objenin içinde olup olmadığını kontrol eder.Eğer içindeyse true değilse false değerini verir.
var mc1:MovieClip = new MovieClip ();
var mc2:MovieClip = new MovieClip ();
var mc3:MovieClip = new MovieClip ();
mc1.addChild(mc2);
trace(mc1.contains(mc2)); // true
trace(mc1.contains(mc3)); // false
getChildAt ()
Şahsen bu metodu ilk okuduğumda pek işime yaramayacağını düşünmüştüm ama hayat kurtarabiliyor.getChildAt metodu belirtilen index numarasındaki objenin instance bilgisini geri dönderiyor.Şöyle izah edim ekrana bir movie clibin birden fazla kopyasını attığınızda, movie cliplere index numarası ile movie clipin instance name’ini alabilirisiniz, yada seçtiğiniz movie clibin x ve y koordinatlarını değiştirebilirsiniz ve daha birçok özelliğe ulaşıp buradan değiştirebilirsiniz.
var main_mc:MovieClip = new MovieClip();
addChild(main_mc);
var mc1:MovieClip = new MovieClip();
main_mc.addChild(mc1);
mc1.x=50;
trace(main_mc.getChildAt(0).x); //50
getChildByName ();
getChildAt metodundan farkı display list’teki index numarası yerine instancename kullanıyor, yani kullandığınız objenin instance name’i ile işlem yapıyorsunuz.
var main_mc:MovieClip = new MovieClip();
addChild(main_mc);
var mc1:MovieClip = new MovieClip();
main_mc.addChild(mc1);
mc1.x=50;
mc1.name = "test_mc";
trace(main_mc.getChildByName("test_mc").x);//50
getChildIndex ()
Objenin display list’deki index numarasını veriyor.
var main_mc:MovieClip = new MovieClip();
addChild(main_mc);
var mc1:MovieClip = new MovieClip();
main_mc.addChild(mc1);
mc1.x=50;
mc1.name = "test_mc";
trace(main_mc.getChildIndex(mc1));//0
removeChild ()
Adından da rahatça anlaşılacağı gibi display list’teki objeyi display list’ten kaldırmak için, tabii bu da seçilen objenin ekrandan kaldırılması demek oluyor.
var main_mc:MovieClip = new MovieClip();
addChild(main_mc);
removeChild(main_mc);
removeChildAt ()
removeChild metodundan tek farkı index numarası ile objeyi ekrandan kaldırabilmeniz.
var main_mc:MovieClip = new MovieClip();
addChild(main_mc);
removeChildAt (0)
setChildIndex ()
Ekranda bulunan objelerin görüntüleme sırasını değiştiriyor.Kısacası index numarasını değiştiriyor.Sıralama sistemi ise klasik sıralama sistemi, index numarası küçük olan en altta index numarası büyük olan en üstte.
setChildIndex(getChildAt(2), 0);
swapChildren ()
swapchildren ekranda bulunan objelerin index numarasını değiştiriyor.setChild index teki farkı ise set childindex metodunda bir objenin index numarasını değiştirince diğer index numaralrı otomatikmen değişiyor.SwapChildren da ise iki objenin index numaraları birbiri ile değişiyor ve ekrandaki diğer index numaraları sabit kalıyor.
swapChildren(circle_blue, circle_red);
swapChildrenAt ()
swapChildren metodundan tek farkı index numarası ile index değiştirme işlemini yapıyor.
swapChildrenAt(0, 2);
numChildren()
DisplayListcontainer sınıfının bu özelliği ile bir objenin içindeki toplam index numarasını yani toplam obje sayısını görüntüleyebiliyorsunuz.
trace(my_mc.numChildren);
mouseChildren()
İlk bakışta biraz garip ve kafa karıştırıcı bulduğum ama sonradan çok işime yarayacağını öğrendiğim bir özellik.Bir objenin içindeki başka bir objenin mouse enabled olup olmayacağını true false değeri ile belirtiyorsunuz.Eğer obje mouse enabled ise kullanıcı objenin özelliklerini kullanabilir ve etkileşimi geçebilir.Default değeri true.
my_mc.mouseChildren =false;
Bu biraz karışık bir örnek olduğu için kodların tamamını yazmayacağım, kaynak dosyaları indirip kontrol edebilirsiniz.
textSnapshot();
Dynamic text box lardan veri okumak yeni birşey değil ama şu anda statik textboxlardan da veriyi okuyabiliyorsunuz. Ekrana static text box içerisine birşeyler yazın ve test edin.
trace(this.textSnapshot.getText(0, this.textSnapshot.charCount));
Hepsi bu kadar.Aslında değil ama en azından en çok kullanılan ve işinize ençok yarıyabilecek olanlar bunlar. Kaynak kodları indirmeniz size yardımcı olucaktır.
Kaynak Kodları buradan indirebilirsiniz.
http://enginyoyen.com/blog/tr/wp-content/uploads/2007/11/displaylist.rar
Kolay Gelsin
Engin Yöyen!
Makale
Ders
MMIstanbul Adobe UG
ColdFusion, Flex, AIR, Flash, PDF, Dreamweaver, Fireworks, Photoshop, Illustrator, iNdesign, Premiere, Soundbooth, Lightroom, InCopy, JRun, LiveCycle, Acrobat, AfterEffects, Resmi Adobe Kullanıcı Grubu.
Etkinlikler
Fuar
CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de
CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de
CeBIT Bilişim Eurasia bu yıl 7 – 12 Ekim tarihlerinde düzenleniyor
Adını dünyanın en büyük on fuarı arasına yazdırarak, İstanbul’u Avrasy...
Kategori: Fuar
MMIstanbul Blog'undan
Neler Yapılabilir?
Yeni bir portal, 30 civarında online / offline etkinlik, seminer vb rağmen MMIstanbul sanıyoruz ki halen hakettiği ilgiyi göremedi. " ...
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)
Ne Nedir Kampanyası Başlıyor!
Çok Merak Edenler için; MMIstanbul Geliştirme Ekibi ve Çalışma Ortamımız





mükemmel bir anlatım olmuş teşekkür ederiz. aradığım şey sanırım buydu.