MovieClipLoader


Flash MX2004 versiyonu ile gelen bu sınıf, loadMovie ve loadMovieNum komutunun yerini alması için planlanmış ve bu komurtlardan çok daha geniş özellikler sunan bir sınıftır.loadMovie() bir swf ve standart formatta jpg dosyasını sahneye yükler.Yüklenecek dosyanın yerinde olup olmadığı, hangi boyutta olduğu,yüklemenin başladığı veya bittiği ile ilgilenmez ve bu özellikleri denetleyemez.MovieClipLoader sınıfı ise yüklenecek dosyanın başından sonuna kadar yüklenmesini denetler.Dosyanın yüklenecek dizinde bulunup bulunmadığı,yüklemenin başladığı, hangi oranda yüklendiği(preloader oluşturulabilir),yüklemenin bittiği ve ilk karenin oynamaya başladığı ana kadar en detaylı şekilde değerlendirme yapabilir.

Bu kadar güzel ve detaylı komutun olumsuz yanı olabilir mi? Maalesef 2004 versiyonunda sıkça gördüğümüz bug lardan bu sınıfta nasibini almıştır.Versiyon 7.0 ve 7.0.1 de aşağıdaki örneği yapmanız mümkün olmayacaktır. Sahneye birden fazla klip yerleştirildiğinde sorun çıkmaktadır.Bu nedenle bu versiyonlarda bir bar klip kullanma yerine sadece bir metin kutusunda yükleme yüzdesini göstermekle yetinmelisiniz. Veya bizim çalışmada uyguladığımız gibi versiyon 7.0.2 yi kullanmalısınız.

Uyarı: MovieClipLoader sınıfı ile yapılan yüklemelere ait preloading işlemi test modunda çalışmaz. Bunun nedeni flash`ın yüklenen yüzdeyi harddiske yazılan veriyi değerlendirerek oluşturmasıdır. Lokal şartlarda veri yazılması sözkonusu olmadığından uyguladığınız preloading işlemi çalışmayacaktır. Deneme yapmak için servera yüklemekten başka çare yoktur. Bu bilgileri bana veren Okan Ulaş arkadaşıma teşekkür ederim.

Detaylara geçmeden önce alttaki butona basarak çalışmayı inceleyebilirsiniz:

DOSYAYI İNDİR

 

Çalışmayı oluşturmak oldukça basittir. Önce sahneye boş bir klip yerleştirin. Bunu manuel olarak yapabileceğiniz gibi doğrudan kodlarla da oluşturabilirsiniz.Bunu:

_root.createEmptyMovieClip("bosklip",1); komutu ile sağlayabilirsiniz.

Klibi manuel hazırladı iseniz sahnede tıklayarak seçip bosklip instance name`ini atayınız. Üste yeni bir layer ekleyin ve buraya dinamik metin kutusu yerleştirin instance name olarak kutu adını verin. En üste 3 layerı ekleyin ve bar görüntüsü için sahneye 8 piksel yüksekliğinde ve 130 piksel genişliğinde (bu değerleri istediğinize göre değiştirebilirsiniz) bir dikdörtgen çizin. Dikdörtgenin dış çizgilerini tıklayarak seçin.(Shift tuşuna basılı tutarak tıklama yaparsanız birden fazla kenarı aynı anda seçme şansına sahip olabilirsiniz)

Ana menüden Edit-->Cut alanına tıklayıp dış çizgileri kesin ,en üst kısma 4.layerı yerleştirin ve yine ana menüden Edit-->Paste in Place şeçeneğini tıklayın kesilen dış kenar aynı alana yerleşecek ama bir üst layerda olacaktır.Şimdi bu dış kenarlar hala seçili iken F8 tuşuna basın ve çizgileri film klibine çevirin.İnstance name kısmına barcerceve yazın. Bir alt layerdaki dikdörtgenin iç kısmını tıklayarak seçin ve F8 tuşuna basın.Açılan panelden film klibi seçeneğini işaretleyin ve filmin merkesini sol dış kenara alın:

Bunun için yukarıdaki grafide gördüğünüz gibi sol ortadaki kutucuğu işaretleyin.Bunun amacı merkez nokta solda kalacağı için bar yükleme arttıkça sağa doğru ilerleyecektir.Bunu yapmaz merkez noktayı orta kısımda bırakırsanız bar hem sağa hem de sola doğru genişleme gösterir.Bu klibe de bar instance name`ini atayınız.

Şu an resmin yükleneceği boşklibimiz,bar ve dinamik metin kutumuz hazır.Artık kodlara geçebiliriz.Bu arada yüklenecek swf dosyamızın adı resim1.swf şeklinde hazırlanmıştır.İsterseniz bir jpg dosyası da yükleyebilirsiniz. En üste kodlar için bir layer ekleyin ve buraya alttaki kodları yazın:

var klipLoader = new MovieClipLoader();
klipLoader.onLoadStart = function (bosklip) {
kutu.text="veriler yükleniyor"
}

klipLoader.onLoadProgress = function (bosklip, yuklenen, total) {
yuzde=Math.floor( yuklenen/total*100);
bar._xscale=yuzde;
kutu.text="% "+yuzde+" yükleme yapıldı"
}

klipLoader.onLoadComplete = function (bosklip){
kutu._visible=false;
bar._visible=false;
barcervece._visible=false;
}

klipLoader.onLoadInit = function (bosklip) {
bosklip._width = 170;
bosklip._height = 170;
}

klipLoader.onLoadError = function (bosklip, hata) {
if(hata=="URLNotFound"){
kutu.text="Dosya bulunamadı";
}else if(hata=="LoadNeverCompleted"){
kutu.text="Bağlantı kesildi";
}
}

klipLoader.loadClip("resim1.swf","_root.bosklip");

Tüm çalışma bu kadar.Şimdi kodların detayına geçebiliriz:

var klipLoader = new MovieClipLoader(); Önce bir yeni bir movieClipLoader nesnesi oluşturulur.

klipLoader.onLoadStart = function (bosklip) {
kutu.text="veriler yükleniyor"
}

İlk yazılacak kod grubu onLoadStart komutudur.Buraya yüklemenin ilk başladığı anda ne yapılması gerektiğini bildiririz.Biz verilerin yüklendiğine dair bir uyarı yazısı çıkmasını istedik.Bu alan çok kısa süreli gözlendiğinden yüklenme hızı fazla ise bu metnin görünmesi atlanabilir.

klipLoader.onLoadProgress = function (bosklip, yuklenen, total) {
yuzde=Math.floor( yuklenen/total*100);
bar._xscale=yuzde;
kutu.text="% "+yuzde+" yükleme yapıldı"
}
Eğer yükleme bilgisi vermek istiyorsanız ikinci sıradaki kod grubu onLoadProgress() tir.Burada 3 parametre görüyorsunuz. İlki takip edilecek hedef klip(bizde yükleme yapılacak olan bosklip`tir) ,diğeri yüklenen verilerin sonuncusu ise toplam yüklenecek verilerin byte değeridir. Daha sonra klasik preloading kodları yazılır.

klipLoader.onLoadComplete = function (bosklip){
kutu._visible=false;
bar._visible=false;
barcervece._visible=false;
}
3.sıradaki kodumuz onLoadComplete`dir.Yükleme tamamlandığı anda yapılması gerekenler sıralanır.Çalışmamızda swf dosyası yüklendiği anda metin kutusunu bar ve barcerceve adlı film klibinin görülmemesini planladık.

klipLoader.onLoadInit = function (bosklip) {
bosklip._width = 170;
bosklip._height = 170;
}
4.sıradaki kod grubumuz onLoadInit() komutudur. Burada klibin yüklenmesi bitip ilk kare oynamaya başladığı andaki yapılması istenenler yazılır.Biz bosklip`in en ve boy oranını 170 piksele ayarladık.

klipLoader.onLoadError = function (bosklip, hata) {
if(hata=="URLNotFound"){
kutu.text="Dosya bulunamadı";
}else if(hata=="LoadNeverCompleted"){
kutu.text="Bağlantı kesildi";
}
}

5.sırada onLoadError komutu var.Burada hata adında bir parametre mevcut.Bir klibin yüklenmemesi için 2 neden vardır.İlki yüklenmesini istediğimiz dizinde bu klibin bulunmamasıdır.Şayet filmi şuradan indir dediğimizde flash orada filmi bulamazsa URLNotFound hatasını verir. İkinci yüklenememe nedeni ise internet bağlantısının kesilmesidir.Flash ilgili dizinde filmi bulur yüklemeye başlar.Bu arada aniden internet bağlantısı kesilirse flash LoadNeverCompleted hatasını verir. Bu bilgilere dayanarak hata parametresine bu değerleri atayarak bir if sorgusu yapılır.Bir sorun olduğunda buna ait bilgiler dinamik metin kutusunda bildirilir.Bu özellikleri sizde deneyerek görebilirsiniz.

klipLoader.loadClip("resim1.swf","_root.bosklip"); Son komutumuz loadClip komutudur. Buraya yüklenecek klibin adı ve yüklenme alanı yazılır.

----------------------------------------

Dinamik yöntemle bu çalışmayı hazırlamak isterseniz :

Flash programını açıp 1.kareye şu kodları yazmanız yeterli olacaktır:

_root.createEmptyMovieClip("bosklip",0);
_root.createTextField("kutu",1,200,200,130,15);
var klipLoader = new MovieClipLoader();

klipLoader.onLoadStart = function (bosklip) {
kutu.text="veriler yükleniyor"
}

klipLoader.onLoadProgress = function (bosklip, yuklenen, total) {
yuzde=Math.floor( yuklenen/total*100);
kutu.text="% "+yuzde+" yükleme yapıldı"
}

klipLoader.onLoadComplete = function (bosklip){
kutu._visible=false;

}

klipLoader.onLoadInit = function (bosklip) {
bosklip._width = 170;
bosklip._height = 170;
}

klipLoader.onLoadError = function (bosklip, hata) {
if(hata=="URLNotFound"){
kutu.text="Dosya bulunamadı";
}else if(hata=="LoadNeverCompleted"){
kutu.text="Bağlantı kesildi";
}
}

klipLoader.loadClip("resim1.swf","_root.bosklip");