Türkçescript

ActionScript 3.0 ve XML

26 Temmuz 2009,

[adrotate group="2" banner="1"]

Bu derste XML veriyi As3 kullanarak flash’e aktaracağız. Yapıyı, kolay anlaşılması açısından basit tuttum. Bunun için  bir başlık, bir içerik yazısı ile yine bir adet resim dosyası kullanıyorum.

İlk önce Xml dosyamızı hazırlayalım; Bunu herhangi bir html editöründe veya daha basit olarak bir notepad uygulamasında da yapabilirsiniz. Aşağıda oluşturduğum xml yapısını kullanıyorum ve data ismiyle xml dosyası olarak kaydediyorum.

<data>
<title name="Başlık">
<content>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled.</content>
<image>img.jpg</image>
</title>
</data>

NOT: Eğer note pad kullanıyorsanız; Türkçe karakterler için dosyayı unicode olarak kaydetmeniz gerekecek, yada flash içerisine Türkçe karakterleri embed etmeniz lazım. Aslında bununla ilgili ayrı bir ders yazmak gerktiğini düşünüyorum, vakit bulursam tabi…

Şimdi ise flash içerisindeki yapıyı hazırlayalım. Yeni bir flash dosya yaratırken Flash File (Actionscript 3.0) olarak seçiyorum.

Evet dosyamızı yarattıktan sonra, ilk önce Save as ile as3_xml ismiyle kaydettim.

NOT: Kullanacağımız data.xml dosyası ve resim dosyasının as3_xml.fla dosyasıyla aynı dizinde olmasına dikkat edelim.

as1Şimdi sahnemize 2 tane dinamik text ekliyorum. Bunları  sahnede alt alta yerleştirdim. Şimdi, üsttekinin (Başlık için olacak) üzerine tıklayarak Properties (özellikler) penceresinde Text Type’ı Dynamic Text olarak seçtikten sonra instance name (örnek isim) kısmına title_txt yazıyorum, bunun Line Type’ını Single line yaptım. Aynı şekilde alttaki text için (İçerik için olacak) Dynamic Text, instance name olarak content_txt ve Multiline şeklinde ayarlamamı yaptım. Diğer ayarları ben kendime göre düzenledim.

Şimdi ise sahneye bir tane boş Movie clip ekleyeceğim. Yeni bir layer açtım Insert menüsünden New Symbol seçiyorum, çıkan pencerede name kısmına img yazdım ve Type’ı Movie clip olarak seçiyorum, sonra da okeyliyorum.sahne Movie clip’i yarattık. Tekrar ana sahneye dönüyorum (Scene 1′e tıklayarak). Yeni yarattığım layer seçili iken Library’den (Kütüphane) img ismli Movie clip’imi sürükle bırak yönetmiyle sahneye, istediğim bir yere yerleştiriyorum. Buna da img_mc örnek ismini verdim. Sahnede ki görüntü; resimdeki gibi oldu.

Artık ActionScript kodumuzu yazabiliriz; en üste yeni bir layer açtım ve f9 a basarak actions panelini açıyorum, ve aşağıdaki kodu ekliyorum.

var req:URLRequest = new URLRequest("data.xml");
var myLoader:URLLoader = new URLLoader();
myLoader.dataFormat = URLLoaderDataFormat.TEXT;

function dataLoaded(evt:Event):void {
try {
var myXML:XML = new XML(evt.target.data);
title_txt.text = myXML.title.@name;
content_txt.text = myXML.title.content;
var loader:Loader = new Loader();
img_mc.addChild(loader);
loader.load(new URLRequest(myXML.title.image));
} catch (e:TypeError) {
trace("hata");
trace(e.message);
}
}

myLoader.addEventListener(Event.COMPLETE, dataLoaded);
myLoader.load(req);

Buraya kadar herşey yolunda gittiyse CTRL + ENTER tuşlarıyla deneme yapabilirsiniz.

Şimdi kod içerisinde neler döndüğünü açıklamaya çalışayım;

Xml dosyamızı dışarıdan alabilmek için URLRequest sınıfını kullanıyoruz, bunun için req isimli bir değişken yarattım. req değişkeniyle dosya erişim bilgisini URLLoader sınıfını kullanarak myLoader isimli bir başka değişkenle load (yükleyeceğim) edeceğim. Veriyi Text şekilinde alacağım.

myLoader değişkenine olay dinleyicisi ekliyorum ve yükleme tamamlandığında dataLoaded adlı fonksiyonu çalıştırıyoruz.

Fonksiyon içerisinde; gelen xml veride herhangi bir hata için try catch kullanıyorum. Xml veriyle çalıştığımız için XML sınıfını kullandım. Burada farklı olan; xml elementlerde nokta kullanırken attributelerde @ işareti kullanarak gelen veriyi title_txt ve content_txt örnek isimli text alanlarımıza aktarıyorum.

Resim için Loader sınıfı bir değişken yarattım ve bunu addChild metoduyla img_mc örnek isimli movieclip içine ekliyorum sonrasında ise buna resimi load ediyorum.

Kaynak dosyayı buradan indirebilirsiniz. Teşekkürler…

1 Star2 Stars3 Stars4 Stars5 Stars (5 votes, average: 4,80 out of 5)
Loading ... Loading ...
:, , , , , ,
17 yorum var:
  1. Actionscript 3.0 kullanarak txt dosyasından veri çekmek.. - Türkçescript

    [...] bir txt dosyasından nasıl veri çekilir onu göstermeye çalışacağım. Aslında daha önce burada xml dosyasından nasıl veri çekilebileceğini kapsamlı olarak anlatmıştım. Mantık aynı [...]

  2. gökhan

    Peki Birden Fazla veriyi nasıl çekeriz

  3. admin

    for döngüsü kullanabilirsin.. As2′deki mantıkla aynı..

  4. gökhan

    bir Örnek Yayınlarsanız çok sevinirim

  5. kelebeknehir

    Allah ne muradın varsa versin. Geceniz bir yarısı saatlerce uğraştım. Bir tek senin kodun çalıştı. Ellerin dert görmesin. Sayende bu gece uyuyacağım.

  6. koder

    çok teşekkürler paylaşımlarınız için gerçekten çok güzel.ben de böyle birşey yaptım.ancak xmlden resimi çektikten sonra boyutlandırma yapamıyorum.x ve y konumunu falan değiştirebiliyorum ancak boyutlandırma olmuyor.bunu nasıl yapabilirim.sizin kodunuza ek olarak
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,tamam)

    böyle birşey ekledim.resim yüklenmesi tamamlanınca diye biyerde görmüştüm.ancak orda tanımladığım fonksiyondada boyotlandırma gibi işlemlere izin vermiyor.bu konuda yardımlarınızı bekliyorum şimdiden teşekkürler

  7. admin

    İstediğini ancak resim yüklendikten sonra yapabilirsin yani bir fonksiyon daha çalıştırman lazım. Nitekim tamam dediğin fonksiyon içerisinde boyutlandırmayı yapabilirsin.. Bu linkte bir örnek var.. tamam fonksiyonu içerisindeki 150 değeri ile oynadığında resmin büyüyüp küçüldüğünü göreceksin. Değerin altındaki eşitleme orantı için.. kolay gelsin..

  8. muzaffer bayındır

    Hocam, eline koluna emeğine vaktine sağlık çok işime yaradı 2 gündür araştırıyorum her yerde txt dosyasında yazı çekmek var hiç xml de yazı çeken bulamamıştım allah zarı olsun.

  9. Ghaash

    Merhaba,
    Elinize sağlık çok güzel bir anlatım olmuş. Sayenizde yaptığım siteye google’ın xml’inden veri çeken bir güncel hava durumu ekledim.

    Ancak flash içinde bunu denediğimde çalışmasına rağmen publish’ten sonra ve server’da çalışmıyor.

    Neden olabilir? Yardımlarınızı bekliyorum, teşekkürler…

  10. admin

    İlk söyleyeceğim; dosya yolunu bi kontrol etmen, bir de bu derste anlattığım son sürüm object kodunu kullan bakalım.. sonucu yazarsın.. kolay gelsin..

  11. Ghaash

    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.events.Event;
    import flash.display.Loader;

    var req:URLRequest = new URLRequest(“http://www.google.com/ig/api?weather=istanbul&hl=tr”);
    var myLoader:URLLoader = new URLLoader();
    myLoader.dataFormat = URLLoaderDataFormat.TEXT;

    function dataLoaded(evt:Event):void{
    try{
    var myXML:XML = new XML(evt.target.data);
    title_txt.text = myXML.weather.current_conditions.temp_c.@data;

    var loader:Loader = new Loader();
    img_mc.addChild(loader);
    loader.load(new URLRequest(“http://www.google.com.tr/”+myXML.weather.current_conditions.icon.@data));
    }
    catch (e:TypeError){
    trace(“Sayfayı yenileyiniz”);
    trace(e.message);
    }
    }
    myLoader.addEventListener(Event.COMPLETE, dataLoaded);
    myLoader.load(req);

    Kodlarım yukardaki gibi. Bu şekilde ctrl+enter ile flash içinde bakıyorum sorun yok imajı da çekiyor dereceyi de. ancak derleyip de swf’yi açtığımda çalışmıyor yani object kodundan olduğunu zannetmiyorum ki denedim maalesef bişey değişmedi.

    başka neden olabilir ki?
    şimdiden yardımların için teşekkür ederim.

  12. admin

    Biraz araştırdım. Sorun olarak şu konularla ilgili olabilir; Türkçe kaynak olarak şu adresi bir incele, yabancı kaynak olarak ta şuna bir bak derim.. Twitter dan bilgi çekerken sorun yaşamamıştım ama onun dışında da swf içerisine başka bir domainden veri çekmedim.. Aslında bu konuya yabancıyım.. Vaktim olursa biraz araştıracağım.. Sen de sorunu bulursan yazarsın buraya.. Kolay gelsin..

  13. Ghaash

    yok hocam çıkamadım ben bu işin içinden. flash içinde çalışıyosa dışarda da çalışmalı anlamsız geldi hata da vermiyor zaten.

  14. Ghaash

    Yapabileceğimiz bişey bulabilirseniz haberdar ederseniz çok mutlu olurum…

  15. Burak

    Hocam çok teşekkür ederim dersleriniz ve örnekleriniz için Allah razı olsun. Benim öğrenmek istediğim, örneğin; menüde 5 kategori var kedi köpük at vb. xml dosyasında da resimleri ve bilgileri var. Menüde kedi kategorisine çıkınca kedi resmi ve bilgileri gelsin istiyorum web sitesi gibi düşününün. bunu nasıl yapabilirim?

  16. admin

    Bunu bir kaç şekilde yapabilirsin.. Şöyleki; ya her bir kategori için ayrı xml dosyaların olacak ki o zaman yukarıdaki basit örnekten gidebilirsin yada tek bir xml dosyan olacak oradan her bir menu kategorine flash içerisinde ilgili xml node’a yönlendirme yapacaksın (butona tıklandığında çalışacak).. Bu yönlendirmeyi node sayısını kullanarak ta yapabilirsin yada id ler vererek te yapabilirsin. Eğer kategorilerimi de xml den çekeceğim diyorsan iş biraz daha karmaşıklaşıyor.. Ama her durumda da as3 e hakim olman gerekiyor.. Vaktim olsa bir ders yazacağım ama vakit ayıramıyorum.. Bu dersin 2. kısmına bir göz at istersen.. Tek bir clip kullanarak onu çoğaltacaksan da 3. derse bir göz at.. Bi sorun olursa yardımcı olabilirim.. kolay gelsin..

  17. Muhammed

    Arkadaşım emeğe değer bi çalışma ve sorunsuz bi çalışma gayet başarılı teşekkür ederim eline sağlık..

    websitesinde yazı formatları desteklemiyor olabilir yada klasör yolunu bulamıyodur bunun için tekrar düzenlemek gerekebilir ftp dosya yolunda veya local klasörünün içinde düzenlemiz gerekecek eğer yazıları göremiyosanız

Yanıtla

İsim

Mail

Websitesi    

*

Bağlantılar!

Kendi projelerimiz ve arkadaşlarımızın projeleri...