XML Kullanarak Dinamik Rotator Yapımı


Bu uygulamamızda XML tabanlı dinamik banner rotator yapacağız. Uygulamanın bitmiş hali yukarıda görmüş olduğunuz gibi. Uygulama için ilk olarak Rotator isminde bir klasör oluşturalım. Klasörü oluşturduktan sonra 625 x 325 piksel boyutlarında yeni bir belge açalım ve klasörün içerisine BannerRotator ismi ile kaydedelim. Belgenin arka plan rengi #333333 olsun. Rotatör isimli klasörün içerisine data ve images isimli iki klasör oluşturalım. XML dosyamızı data klasorunun içerisine, imajlarıda images klasörünün içerisine kaydedeceğiz. Klasör yapısının aşağıdaki gibi olması gerekmektedir.

İlk olarak XML dosyamızı oluşturup data.xml adı ile data klasörünün içerisine kaydedelim. XML belgesinin içeriği aşağıdaki gibidir.İmajların adres bilgileri için path, imajlara tıklandığında açılacak sayfaların adresleri içinde link niteliklerini(Attribute) kullanacağız. İmages klasörünün içerisine de kullanacağımız imajları kaydedelim. Kullanacağımız imajların boyutlarını da 575 x 275 piksel olarak ayarlayalım.

<images>

<image path="images/image1.jpg" link="http://actionscript.gen.tr"/>
<image path="images/image2.jpg" link="http://actionscript.gen.tr"/>
<image path="images/image3.jpg" link="http://actionscript.gen.tr" />
<image path="images/image4.jpg" link="http://actionscript.gen.tr"/>
<image path="images/image5.jpg" link="http://actionscript.gen.tr"/>
<image path="images/image6.jpg" link="http://actionscript.gen.tr"/>

</images>

Şimdi Flash belgemize geri dönelim. Uygulama içerisinde kullacağımız butonları hazırlayalım. İmajlar arasında ileri geri hareket edebilmek için iki tane, toplam imaj sayısını gösterebilmek içinde 1 tane olmak üzere toplamda 3 butona ihtiyacımız olacak. Butonlar MovieClip sembolü olarak hazırlamamız gerekiyor. Ayrıca tüm butonların içlerinde birer tane dinamik text alanı olması gerekiyor. Dinamik text alanlarının isimleri aşağıdaki gibidir. MovieClipleri oluştururken ileri gitmek için kullanacağımız butonun ismini Next, geri gitmek için kullanacağımız butonun ismini Previous, sayıları göstermek için kulanacağımız butonun ismini de Selector olarak değiştirelim ve Convert to Symbol penceresindeki Advanced ikonuna tıklayalım ve açılan bölüme Export for ActionScript seçeneğini işaretleyelim. Bu seçeneği işaretledikten sonra Class sekmesinde yukarıda belirttiğim isimler yoksa düzeltelim ve Ok butonuna tıklayarak pencereyi kapatalım. Selector isimli MovieClip’in içerisindeki text alanının renginide #333333 olarak değiştirelim.

Yüklenen imaj sayısını kullanıcıya bildirmek içinde bir Preloader kullanacağız. Sahne boyutlarında bir dikdörtgen çizelim. Rengi #99999 ve Alpha değeri %50 olsun. Dikdörtgeni seçelim ve MovieClip olarak sembole dönüştürelim. Convert to Symbol panelinde ismini Preloader olarak değiştirelim ve pencereyi kapatalım. Instance Name kısmına preloader_mc yazalım. Sonrada çift tıklayarak sembolün içerisine girelim ve sembolün içerisine dinamik bir text alanı ekleyelim. Text alanının isminde load_txt olsun.

MovieClipleri hazırladığımıza göre kodları yazmaya başlayabiliriz. İlk olarak varsa sahne üzerinde bulunan sembolleri temizleyelim ve Actions panelini açalım. İlk olarak XML dosyasındaki verileri yüklemek için URLLoader nesnesi t tanımlayacağız.

var xmlLoader:URLLoader=new URLLoader();
xmlLoader.load(new URLRequest("data/data.xml"));

Sonrada uygulama içerisinde kullanacağımız değişkenleri tanımlayacağız. xmlData nesnesi XML dosyasındaki tüm datayı, xmlList nesnesi ise images tagları içerisindeki bilgiyi içerisinde tutacak. imageLoader nesnesini imajları yüklemek için kullanacağız. loaded değişkeni ile yüklenen imaj sayısını, howImage değişkeni ile hangi imajın görüntülendiğini, imageWidth değişkeni ile de imajların genişlik değeri bilgilerini saklayacağız.

var xmlData:XML;
var xmlList:XMLList;
var imageLoader:Loader;
var loaded:int = 0;
var howImage:int;
var imageWidth:int;

Şimdi de uygulama içerisinde kullanacağımız MovieClipleri tanımlıyoruz. maskMC ile imajları maskeleme işlemini gerçekleştireceğiz. holderMC ve imageHolderMC MovieClipler’i sadece imajları taşıma işlemi yapacak. Son olarakta oluşturduğumuz MovieClip’leri uygulama içerisine dahil ediyoruz.

var maskMC:MovieClip=new MovieClip();
maskMC.graphics.beginFill(0x000000);
maskMC.graphics.drawRect(25,25,575,275);
maskMC.graphics.endFill();
addChild(maskMC);
var holderMC:MovieClip;
var imageHolderMC:MovieClip;
var selectorMC:MovieClip;

var nextButton:Next;
var prevButton:Previous;
var selector:Selector;

Üç tane dizi tanımlaması yapıyoruz. imagePosition dizisine imajların x konumlarını, images dizisine imajları taşıyacak MovieClipleri, selectors dizisine ise imaj sayısına göre oluşturulacak butonları ekleyeceğiz.

var imagePosition:Array=new Array();
var images:Array=new Array();
var selectors:Array=new Array();

Geçişlerin belirlediğimiz süre bitiminde otomatik olarak yapılması için bir Timer nesnesi tanımlıyoruz ve süreyi 5 saniye olrak ayarlayoruz.

var transitionsTimer:Timer = new Timer(1000 * 5);

Kullanacağımız nesne ve değişkenleri tanımladıktan sonra xmlLoader nesnesine bir olay dinleyici ekleyerek yükleme işleminin bitişini kontrol edeceğiz. Fonksiyon içerisinde de kullanacağımız değişken ve nesnelere değer atamalarını yapacağız. holderMC isimli MovieClip tüm imajları içerisinde taşıyacak. maskMC ile de maskeleme işlemini gerçekleştireceğiz. imageLoader nesnesine olay dinleyici ekleyerek yükleme işlemi bittiğinde bir sonraki imajın yüklenmesini sağlayacağız. Preloader_mc içerisindeki text alanına da toplam imaj sayısını ve bu imajların kaç tanesinin yüklendiğini yazdıracağız

xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);

function xmlLoaded(e:Event)
{
    xmlData = new XML(e.target.data);
    xmlList = new XMLList(xmlData.children());

    imageLoader=new Loader();
    holderMC=new MovieClip();
    imageHolderMC=new MovieClip();
    addChild(holderMC);
    holderMC.x = 25;
    holderMC.y = 25;
    maskMC.cacheAsBitmap = true;
    holderMC.cacheAsBitmap = true;
    holderMC.mask = maskMC;
   
    imageHolderMC.buttonMode = true;
    imageLoader.load(new URLRequest(xmlList[loaded].@path));
    imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
    preloader_mc.load_txt.text = String(loaded + 1) + " / " + xmlList.length() + " IMAGES LOADING";
}

imageLoaded fonksiyonunu tanımlıyoruz. Fonksiyon içerisinde yüklenen imajları imageHolderMC isimli MovieClip içerisine, imageHolderMC MovieClip’lerinide holderMC isimli MovieClip içerisine ekleyeceğiz. imageHolderMC MovieClip’lerini images isimli diziye ekledikten sonra loaded değişkenin değerini bu nesnelere isim olarak atayacağız. imageWidth değişkenine değer olarak yüklenen imajların genişliklerini atayacağız. imagePositions isimli dizi içerisinde de yüklenen her imajın x konumunu ekleyeceğiz. Slayt sola doğru hareket edeceği içinde -1 ile çarpıp negatif değere çevireceğiz.

İf.. else if koşullu ifadesi ile de yüklenen imajların sayısını kontrol edeceğiz. Eğer XML içerisindeki element sayısından küçükse loaded değişkeninin değerini artıracağız. Yeni bir imageLoader nesnesi tanımlayacağız ve yükleme işleminin bitişini kontrol etmek için bir olay dinleyici ekleyeceğiz. Eğer loaded değişkeninin değeri(yani yüklenen imaj sayısı) eleman sayısına eşitse buton olarak kullanacağımmız MovieClip’leri sahneye ekleyip geçişleri sağlayabilmek için olay dinleyicileri ekleyeceğiz. Selector isimli MovieClip’leri sahneye eklemek ve imajlara link verebilmek içinse bir döngü oluşturacağız. Oluşturduğumuz MovieClipleri selectorMC içerisinde ekleyip, butonlara tıklandığında ilgili imaja geçilebilmesini sağlamak için olay dinleyici ekleyeceğiz. Oluşturulan MovieClip’lerin isimlerini de döngünün içerisindeki i değişkeninden alacağız. İmages dizisi içerisindeki eleman sayısıda aynı olacağı için döngü içerisinde images dizisinin elemanlarına birer olay dinleyici ekleyerek sayfaların linklerini vereceğiz. Son olarakta preloader_mc isimli MovieClip’i sahneden kaldırıp Timer nesnesini çalıştıracağız.

function imageLoaded(e:Event)
{
    imageHolderMC=new MovieClip();
    holderMC.addChild(imageHolderMC);
    imageHolderMC.addChild(imageLoader);
    imageHolderMC.x = loaded * imageLoader.content.width;
    imageHolderMC.buttonMode = true;
    images.push(imageHolderMC);
    imageHolderMC.name=String(loaded);
    imageWidth = imageLoader.content.width;
    imagePosition.push(((imageWidth*loaded)*-1)+25);
    preloader_mc.load_txt.text = String(loaded + 1) + " / " + xmlList.length() + " IMAGES LOADING";
    setChildIndex(MovieClip(preloader_mc), numChildren-1);

    if (loaded + 1 < xmlList.length())
    {
        loaded++;
        imageLoader=new Loader();
        imageLoader.load(new URLRequest(xmlList[loaded].@path));
        imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
    }
    else if (loaded + 1 >= xmlList.length())
    {
        nextButton=new Next();
        prevButton=new Previous();
        addChild(nextButton);
        addChild(prevButton);
        nextButton.x = stage.stageWidth - 25;
        nextButton.y = stage.stageHeight / 2;

        prevButton.x = 25;
        prevButton.y = stage.stageHeight / 2;
        nextButton.buttonMode = true;
        prevButton.buttonMode = true;
        nextButton.mouseChildren = false;
        prevButton.mouseChildren = false;

        nextButton.addEventListener(MouseEvent.CLICK, nextImage);
        prevButton.addEventListener(MouseEvent.CLICK, prevImage);

        selectorMC=new MovieClip();

        for (var i:int=0; i<xmlList.length(); i++)
        {
            selector=new Selector();
            selectorMC.addChild(selector);
            selector.selector_txt.text = String(i + 1);
            selector.name = String(i);
            selector.x = 25 * i;
            selector.buttonMode = true;
            selector.mouseChildren = false;
            selectors.push(selector);
            selector.addEventListener(MouseEvent.CLICK, selectImage);
            images[i].addEventListener(MouseEvent.CLICK, gotoURL);
        }

        addChild(selectorMC);
        selectorMC.x = stage.stageWidth / 2 - selectorMC.width / 2;
        selectorMC.y = 305;
        selectors[howImage].selector_txt.textColor = 0x000000;
        removeChild(preloader_mc);
        transitionsTimer.start();
    }
}

Geçişileri sağlayabilmek için transitions() isminde bir fonksiyon oluşturacağız. Fonksiyon içerisinde ilk olarak Timer nesnesini resetleyip tekrar başlatacağız. Böylece süre dolmadan nextImaga, prevImage ya da selector butonlarından birine tıklandığında süreyi baştan başlatacağız. Sonrasında howImage degişkeninin değerini kontrol edeceğiz. Fonksiyon çalıştığında eğer xmlList nesnesinin eleman sayısına eşitse değerini sıfıra, eğer howImage değişkeninin değeri sıfırdan küçükse xmlList nesnesinin eleman sayısına eşitleyeceğiz. Böylece ilk veya son imaj görüntülenirken takılma olmayacak. Sonrasında da for döngüsü ile selector butonlarının içerisinde bulunan text alanının yazı rengini #999999 olarak değiştireceğiz. Döngünün çalışması bittikten sonra da howImage değişkeninin değerine göre hangi imaj görüntüleniyorsa selectors dizisinin ilgili elemanın içerisindeki text alanının yazı rengini #000000 olarak değiştireceğiz. Fonksiyon içerisinde son olarakta bir tween oluşturarak geçişlerin yapılmasını sağlayacağız. Tween animasyonunun başlangıç noktası holderMC isimli MovieClip’in x konumu, bitiş noktası ise imagePositions dizisinin içerisinde ilgili index numarasına sahip elemanın değeri olacak. Tween nesnesini oluşturmadan önce ilgili sınıfların import edilmesi gerekmektedir.

import fl.transitions.Tween;
import fl.transitions.easing.*;

Fonksiyonun aşağıdaki gibi olması gerekmektedir.

function transitions()
{
    transitionsTimer.reset();
    transitionsTimer.start();

    if (howImage >= xmlList.length())
    {
        howImage = 0;
    }
    else if (howImage<0)
    {
        howImage = xmlList.length() - 1;
    }

    for (var j:int=0; j<xmlList.length(); j++)
    {
        selectors[j].selector_txt.textColor = 0x999999;
    }

    selectors[howImage].selector_txt.textColor = 0x000000;

    new Tween(holderMC,"x",Regular.easeOut,holderMC.x,imagePosition[howImage],1,true);
}

Son bölümde de Timer nesnesine bir olay dinleyici ekleyeceğiz ve daha öncesinde butonlara eklemiş olduğumuz olay dinleyicilerin fonksiyonlarını tanımlayacağız. nextImage butonuna tıklandığında veya Timer nesnesi çalıştığında howImage değişkenin değerini artırıp, prevImage butonuna tıklandığında azaltacağız. Selector butonlarından birine tıklandığında ise howImage değişkeninin değerini tıklanan butonun ismine göre değiştireceğiz. Tüm fonksiyonlarda değişkenin değerini değiştirdikrten sonra transitions() fonksiyonunu çağırarak geçişin yapılmasını sağlayacağız. transitions() fonksiyonun en altta kalacak şekilde aşağıdaki kod bloklarını yazalım.

transitionsTimer.addEventListener(TimerEvent.TIMER, startTransitions);

function startTransitions(e:TimerEvent)
{
    howImage++;
    transitions();
}

function nextImage(e:MouseEvent)
{
    howImage++;
    transitions();
}

function prevImage(e:MouseEvent)
{
    howImage--;
    transitions();
}

function selectImage(e:MouseEvent)
{
    howImage = e.target.name;
    transitions();
}

Son olarakta gotoURL fonksiyonunu tanımlayacağız. Hangi sayfanın açılacağını tıklanan imajın ismine göre xmlList nesnesinin ilgili elemanının içerisinde bulunan link niteliğini(attribute) kullanarak belirleyeceğiz. Eğer sayfanın aynı pencerede açılmasını istiyorsak “_blank” ifadesini “_self” olarak değştirebiliriz.

function gotoURL(e:MouseEvent)
{
       navigateToURL(new URLRequest(xmlList[e.currentTarget.name].@link),"_blank");
}

Evet böylece rotatoru tamamlamış olduk. Kodların bitmiş halinin aşağıdaki gibi olması gerekmekdedir.

import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import flash.events.MouseEvent;
import flash.ui.Mouse;

var xmlLoader:URLLoader=new URLLoader();
xmlLoader.load(new URLRequest("data/data.xml"));

var xmlData:XML;
var xmlList:XMLList;
var imageLoader:Loader;
var loaded:int = 0;
var howImage:int;
var imageWidth:int;

var maskMC:MovieClip=new MovieClip();
maskMC.graphics.beginFill(0x000000);
maskMC.graphics.drawRect(25,25,575,275);
maskMC.graphics.endFill();
addChild(maskMC);
var holderMC:MovieClip;
var imageHolderMC:MovieClip;
var selectorMC:MovieClip;

var nextButton:Next;
var prevButton:Previous;
var selector:Selector;

var imagePosition:Array=new Array();
var selectors:Array=new Array();
var images:Array=new Array();

var transitionsTimer:Timer = new Timer(1000 * 5);

xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);

function xmlLoaded(e:Event)
{
    xmlData = new XML(e.target.data);
    xmlList = new XMLList(xmlData.children());

    imageLoader=new Loader();
    holderMC=new MovieClip();
    imageHolderMC=new MovieClip();
    addChild(holderMC);
    holderMC.x = 25;
    holderMC.y = 25;
    maskMC.cacheAsBitmap = true;
    holderMC.cacheAsBitmap = true;
    holderMC.mask = maskMC;
   
    imageHolderMC.buttonMode = true;
    imageLoader.load(new URLRequest(xmlList[loaded].@path));
    imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
    preloader_mc.load_txt.text = String(loaded + 1) + " / " + xmlList.length() + " IMAGES LOADING";
}

function imageLoaded(e:Event)
{
    imageHolderMC=new MovieClip();
    holderMC.addChild(imageHolderMC);
    imageHolderMC.addChild(imageLoader);
    imageHolderMC.x = loaded * imageLoader.content.width;
    imageHolderMC.buttonMode = true;
    images.push(imageHolderMC);
    imageHolderMC.name=String(loaded);
    imageWidth = imageLoader.content.width;
    imagePosition.push(((imageWidth*loaded)*-1)+25);
    preloader_mc.load_txt.text = String(loaded + 1) + " / " + xmlList.length() + " IMAGES LOADING";
    setChildIndex(MovieClip(preloader_mc), numChildren-1);

    if (loaded + 1 < xmlList.length())
    {
        loaded++;
        imageLoader=new Loader();
        imageLoader.load(new URLRequest(xmlList[loaded].@path));
        imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
    }
    else if (loaded + 1 >= xmlList.length())
    {
        nextButton=new Next();
        prevButton=new Previous();
        addChild(nextButton);
        addChild(prevButton);
        nextButton.x = stage.stageWidth - 25;
        nextButton.y = stage.stageHeight / 2;

        prevButton.x = 25;
        prevButton.y = stage.stageHeight / 2;
        nextButton.buttonMode = true;
        prevButton.buttonMode = true;
        nextButton.mouseChildren = false;
        prevButton.mouseChildren = false;

        nextButton.addEventListener(MouseEvent.CLICK, nextImage);
        prevButton.addEventListener(MouseEvent.CLICK, prevImage);

        selectorMC=new MovieClip();

        for (var i:int=0; i<xmlList.length(); i++)
        {
            selector=new Selector();
            selectorMC.addChild(selector);
            selector.selector_txt.text = String(i + 1);
            selector.name = String(i);
            selector.x = 25 * i;
            selector.buttonMode = true;
            selector.mouseChildren = false;
            selectors.push(selector);
            selector.addEventListener(MouseEvent.CLICK, selectImage);
            images[i].addEventListener(MouseEvent.CLICK, gotoURL);
        }

        addChild(selectorMC);
        selectorMC.x = stage.stageWidth / 2 - selectorMC.width / 2;
        selectorMC.y = 305;
        selectors[howImage].selector_txt.textColor = 0x000000;
        removeChild(preloader_mc);
        transitionsTimer.start();
    }
}

transitionsTimer.addEventListener(TimerEvent.TIMER, startTransitions);

function startTransitions(e:TimerEvent)
{
    howImage++;
    transitions();
}

function nextImage(e:MouseEvent)
{
    howImage++;
    transitions();
}

function prevImage(e:MouseEvent)
{
    howImage--;
    transitions();
}

function selectImage(e:MouseEvent)
{
    howImage = e.target.name;
    transitions();
}

function gotoURL(e:MouseEvent)
{
    navigateToURL(new URLRequest(xmlList[e.currentTarget.name].@link),"_blank");
}

function transitions()
{
    transitionsTimer.reset();
    transitionsTimer.start();

    if (howImage >= xmlList.length())
    {
        howImage = 0;
    }
    else if (howImage<0)
    {
        howImage = xmlList.length() - 1;
    }

    for (var j:int=0; j<xmlList.length(); j++)
    {
        selectors[j].selector_txt.textColor = 0x999999;
    }

    selectors[howImage].selector_txt.textColor = 0x000000;

    new Tween(holderMC,"x",Regular.easeOut,holderMC.x,imagePosition[howImage],1,true);
}
Örnek çalışma dosyasını indirebilmek için siteye üye olmanız gerekmektedir. Siteye üye olmak için tıklayın.

, , , , , ,

  1. avatar

    #1 by rosental on 21 Kasım 2010 - 11:30

    gözlerine ve emeğine sağlık süper olmuş:))

  2. avatar

    #2 by dilde on 21 Kasım 2010 - 15:29

    elinize sağlık tam aradığım gibi:)

  3. avatar

    #3 by siyammar on 16 Aralık 2010 - 14:56

    Çok güzel bir çalışma elinize sağlık ..

  4. avatar

    #4 by promaster_20 on 18 Aralık 2010 - 22:38

    eline sağlık güzel çalışma inceliyorum

  5. avatar

    #5 by aysen on 27 Ocak 2011 - 16:01

    Ellerinize sağlık emek vermişsiniz.
    Yalnız bende bir sıkıntı oldu.Kodu aynen söylediğiniz gibi yazdığım halde olmuyor.Verdiğiniz linkden indiriyorum formatla ilgili bir sorun çıkıyor.Ben CS4 kullanıyorum sanırım siz CS5 kullanmışsınız.Bu sorunu nasıl çözebilirim.Yardımcı olursanız çok sevinirim.

  6. #6 by Erol Demirer on 27 Ocak 2011 - 16:24

    @aysen aynı linkten dosyayı tekrar indirebilirsin. CS4 versiyonunu da ekledim dosyanın içerisine.

  7. avatar

    #7 by yilmaz_ars on 28 Ocak 2011 - 22:22

    Ellerinize sağlık.
    Sizin kodlarınızdan faydalanarak yapmaya çalıştığım bir uygulamam var. AS den anladığımı da söyleyemem ve vakit dar. Php ile xml dosyaları oluşturup flash dan verileri çekiyorum. Fakat 2 tane xml dosyası ile çalışmam lazım. Biri xml dosyası yuklendiginde, fonksiyon içerisinde kullanıyorum. İkincisi buton click olayında bir fonksiyon tarafından kullanılacak. Gosterdiklerinizen yola cıkarak bişeyler yaptım ama hata veriyor. İşin içinden cıkamadım. Yardım ederseniz sevinirim.
    Hata kodu: ReferenceError: Error #1069: 0 özelliğin fl.controls.List üzerinde bulunamadı ve varsayılan değer yok.
    at proje_fla::MainTimeline/sonucu_gor()
    .
    .
    .
    var xmlLoader1:URLLoader = new URLLoader();
    var xmlLoader2:URLLoader = new URLLoader();
    xmlLoader1.load(new URLRequest(“http://localhost/belirti_px.php”));
    xmlLoader2.load(new URLRequest(“http://localhost/hastalik_px.php”));
    var xml:XML;
    var xmlList:XMLList;
    var xml1:XML;
    var xmlList1:XMLList;

    xmlLoader1.addEventListener(Event.COMPLETE, yuklendi);
    eklebtn.addEventListener(MouseEvent.CLICK,ekle);
    silbtn.addEventListener(MouseEvent.CLICK,sil);
    sonucbtn.addEventListener(MouseEvent.CLICK,sonucu_gor);

    function yuklendi(e:Event) {

    function sonucu_gor(e:Event){

  8. #8 by Erol Demirer on 31 Ocak 2011 - 17:00

    List Component’ini kullanmışsın. Componentte olmayan bir özellik kullanıldığı için hata veriyor.

  9. avatar

    #9 by governator on 15 Şubat 2011 - 13:04

    Emeginize saglık çok kullanıslı bir yapı. Ben bu yapıyı biraz daha degistirmek istiyorum. örnegin: alttaki 1-2-3-4-5 kutucukları yerine buyuk resimlerin kucuk hallerini yerlestirmek istiyorum fakat yapamadım. Şu sekilde yapabiliyorum örn: bir tane daha Loader nesnesi olusturup bahsettigim ufak resim için dışardan resimleri tekrardan çekiyorum fakat her ikisi içinde bir yukleme soz konusu oluyor bunun yerine Loader nesnesini veya HolderMC yi klonlayıp asagıda ufak hallerini gosterebilirmiyiz 1-2-3-4-5 kutucukları yerine?

    Tesekkurler. Elinize saglık

  10. #10 by Erol Demirer on 16 Şubat 2011 - 07:31

    Altta kullanmak istediğin imjaları küçük boyutları ile hazırlayıp yüklemen daha mantıklı olacaktır. İlla dediğin şekilde yapacaksanda Bitmapdata sınıfını kullanarak imajların birer kopyasını dinamik olarak oluşturup ekleyebilirsin.

  11. avatar

    #11 by governator on 19 Şubat 2011 - 07:38

    evet ilk dediginiz daha mantıklı o şekilde yaptım güzel oldu teşekkur ederim

  12. avatar

    #12 by governator on 22 Şubat 2011 - 20:36

    merhaba erol hocam bu xml galeriyle ilgili şöyle bir şey daha yapmak istiyorum:

    timer nesnesinin zamanını xmlden kontrol edecegim fakat hata veriyor.mesela
    var trnsSecond:int = 5;
    var transitionsTimer:Timer=new Timer(1000*trnsSecond);
    buradaki trnsSecond bir degisken bu degiskeni function xmlLoaded(evt:Event) { fonksiyonu içerisine yazıyorum yolunuda xmlden veriyorum fakat sorun çıkıyor nasıl bir yol izlemeliyim? tesekkürler

  13. #13 by Erol Demirer on 23 Şubat 2011 - 07:38

    Verdiği hata nedir? Değişkenin değerini xml üzerinden değilde manuel olarak verdiğinde sorun oluyor mu? Eğer manuel olarak verdiğinde sorun olmuyorsa xml üzerinden değer atamada sorun vardır.

  14. avatar

    #14 by governator on 23 Şubat 2011 - 08:32

    kod olarak bir hata yoktu ama sahnede nesneler hızlıca bir saga bir sola tekrar ediyordu dun. tesekkur ederim sorunu çözdum timer nesnesi olay dinleyicisini xml yuklendi fonksiyonunun içine alınca sorun kalktı transitionsTimer.addEventListener(TimerEvent.TIMER, startTransitions);

    tekrar tesekkurler iyi çalısmalar

  15. avatar

    #15 by governator on 23 Şubat 2011 - 08:40

    Birde erol hocam slaytta kesik kesik geçişler oluyor bunu onleyebilirmiyiz tweenin hızını degistirdigimde o geçişler belli olmuyor fakat bu seferde çok hızlı gidiyor.

  16. avatar

    #16 by csharplaz on 05 Mart 2011 - 21:28

    daha az kod ile yapılan bi media player var mı acaba ? elinize sağlık bu da güzel olmuş..

  17. avatar

    #17 by turanian on 14 Mart 2011 - 14:42

    Emeğinize sağlık…çok iyi bir örnek anlatım olmuş.

  18. avatar

    #18 by e.arzu on 10 Mayıs 2011 - 12:35

    Emeğinize sağlık.

  19. avatar

    #19 by Serhat Sezer on 23 Mayıs 2011 - 21:06

    imagePosition.push(((imageWidth*loaded)*-1)+25);

    buradaki mantıgı anlayamadım nedir mantıgı acıklarsanız cok seniecegim:(

  20. #20 by Erol Demirer on 23 Mayıs 2011 - 22:17

    Butonlara tıklandığında ya da timer süresi dolduğunda imajlar sola doğru hareket ediyor. Bunlar için bir nokta belirlenmezse geçişlerde bozulmalar imajın yarıda kalması gibi) olabilir. Yukarıdaki yöntem de ilk önce imajın yüklenen imajın genişliğini alıyor ve kaç imaj yüklendiğini değer olarak tutan değişkenin ile çarpılıyor, sonra da imajlar sola doğru hareket edeceği için -1 ile çarpılarak negatif değer döndürülüyor. Sağa doğru hareket edecekse -1 ile çarpmaya gerek yok, fakat imajları yerleştirirken x konumlarının negatif değerde olması gerekir. En son eklenen 25 ise movieclip’in sahne üzerindeki x konumu 25 piksel olduğu için eklendi. Eğer 0 olsaydı eklemeye gerek olmazdı.

  21. avatar

    #21 by m_bruce44 on 16 Şubat 2012 - 14:20

    güzel bir uygulama.eline sağlık…..

(yayınlanmayacak)

Login with Facebook:
Giriş
 

Additional comments powered by BackType