wykrycie wczytywania

Technologia Flash, czyli animacja na potrzeby stron WWW to świat daleko odbiegły od zwykłego programowania i kodu. Zapytaj o pomoc i podziel się z nami Twoimi problemami z zakresu Flasha.
LHT
Posty: 13
Rejestracja: sob maja 10, 2003 12:46 am

wykrycie wczytywania

Post autor: LHT »

Witam, mam taki problemik:
jest Scene2 w niej MC "View" i w niego ładowany jest zewnętrzny klip1.swf po kliknięciu na przycisk "B1" w menu. Klipów jest kilka i przycisków analogicznie też, każdy wpierw czyści zawartość "View" po czym ładuje pzrypisany sobie .swf do "View". Chcę zrobić preloader uniwersalny zawarty bezpośrednio w Scene2 pokazujący się w momęcie jakiegokolwiek ładowania danych w MC "View".

Pozdrawiam i dziękuje za ewentualne pomysły
djafterhour
Nowy
Nowy
Posty: 101
Rejestracja: pt lip 13, 2007 5:12 pm

Re: wykrycie wczytywania

Post autor: djafterhour »

Zobacz może Ci się to przyda
Zrób poza sceną przycisk o nazwie instancji "B" i w tym przycisku umieść pole tekstowe z wartością var = tekst

Kod: Zaznacz cały

var pliki:Array = ["swf1.swf","swf2.swf","swf3.swf"];
var labels:Array = ["Clip1", "Clip2", "Clip3"];
var pozycja_def = 0;
var wysokosc = B._height;

function loadSwf(plik){
	var view:MovieClip = this.createEmptyMovieClip("view", this.getNextHighestDepth());
	view._x = 60;
	var mcLoader:MovieClipLoader = new MovieClipLoader();
	var listener:Object = new Object();
	var interval:Object = new Object();
	mcLoader.addListener(listener);
	mcLoader.loadClip(plik, view);
	interval.id = setInterval(Progress, 1, mcLoader, view, interval);
	
	listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
		procent = Math.round(bytesLoaded/bytesTotal *100 );
		trace(Math.round(bytesLoaded/8000) + "/" + Math.round(bytesTotal/8000) +'KB\t' + procent+"%"); 
	};
};
function Progress(mcLoader:MovieClipLoader, view:MovieClip, interval:Object):Void {
	var progress:Object = mcLoader.getProgress(view);
	trace("Załadowano bitów " + progress.bytesLoaded + " Całkowita ilość bitów " + progress.bytesTotal);
	if(progress.bytesLoaded == progress.bytesTotal) {
		clearInterval(interval.id);
	};
};

function budujMenu(wysokosc:Number, pozycja_def:Number,pliki:Array, labels:Array){
	for(i=0;i< pliki.length; i++){
		pozycja_y = pozycja_def + i*wysokosc;
		B.duplicateMovieClip("B"+i,this.getNextHighestDepth(), {_y:pozycja_y,_x:0});
		this["B"+i].i = i;
		this["B"+i].tekst = labels[i]
		this["B"+i].onPress = function(){
			//view.removeMovieClip();
			loadSwf(pliki[this.i]);
		};
	};
};
budujMenu(wysokosc, pozycja_def,pliki, labels);
stop();
djafterhour
Nowy
Nowy
Posty: 101
Rejestracja: pt lip 13, 2007 5:12 pm

Re: wykrycie wczytywania

Post autor: djafterhour »

a tu masz linka do przykładu:
www.pleciuga.pl/majkel/Loader.zip
LHT
Posty: 13
Rejestracja: sob maja 10, 2003 12:46 am

Re: wykrycie wczytywania

Post autor: LHT »

hmmmm,dzięki za odpowiedź ale nie mam pojęcia o co chodzi, jestem początkujący raczej i zanim się pzregryze pzrez ten skrypt to mnie zima zastanie, co wejde na forum to jest inny sposób kodowania preloaderów, moda na jakies funkcje, więc może uproszcze sobie wizje swoją i wprowadze takie udogodnienie ażeby nic nie zliczało tylko w czasie wczytywania .swf w MC "view" inny MC w scene2 poprostu zmieniał się pomiędzy _visible = true i false, taka jakby lampka kontrolna pokazująca wczytywanie, macie jakieś pomysły bo ja już nad tym myśle 2 dzień i nic nie wymyśliłem :-)
djafterhour
Nowy
Nowy
Posty: 101
Rejestracja: pt lip 13, 2007 5:12 pm

Re: wykrycie wczytywania

Post autor: djafterhour »

Ok. To by było tak (przykład z helpa) znaleźć go można poprzez wprowadzenie do pola search wyrażenia "onLoadProgress":

Kod: Zaznacz cały

/*tworzymy nowy klip (możesz tą linię pominąć bo masz już clip View i zamiast container wszędzie używaj View*/
var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());

// tworzymy Nowy Loader klasy MovieClipLoader
var mcLoader:MovieClipLoader = new MovieClipLoader();

// tworzymy nowy element nasłuchu zdarzeń
var listener:Object = new Object();

//definiujemy zdarzenie przypisując mu funkcję z parametrami ładowania
//zdarzenie onLoadProgress
listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
    trace(target + ".onLoadProgress with " + bytesLoaded + " bytes of " + bytesTotal);
}

// definiujemy co ma się stać po załadowaniu
listener.onLoadInit = function(target:MovieClip):Void {
    trace(target + ".onLoadInit");
}

//podłączamy wszystkie wcześniej zdefiniowane zdarzenia do obiektu 
//mcLoader za pomocą metody addListener;
mcLoader.addListener(listener);

// w końcu wczytujemy odpowiedni plik do "kontenera" u Ciebie jest to "View"
mcLoader.loadClip("http://www.w3.org/Icons/w3c_main.png", container);
Ostatnia linia wTwoim przypadku powinna być zastąpiona w podobie do tego:

Kod: Zaznacz cały

B1.onPress = function(){
  mcLoader.loadClip("plik1.swf", View);
}
// i analogicznie
B2.onPress = function(){
  mcLoader.loadClip("plik2.swf", View);
}
B3.onPress = function(){
  mcLoader.loadClip("plik1.swf", View);
}
i MovieClip "View" nie musi być czyszczony przy każdym ładowaniu, jest to robione automatycznie przy ładowaniu nowego pliku.
LHT
Posty: 13
Rejestracja: sob maja 10, 2003 12:46 am

Re: wykrycie wczytywania

Post autor: LHT »

ano, teraz to już wiem wszystko co trzeba, dzięki śliczne za wersje z komentami, biore się do dziobania tematu odrazu.
A swoja drogą, jak uczyłem się actionscript 5 lat temu to nie było takiej mody na funkcje albo mnie się tak wydaje. kto mi to wytłumaczy? :)
Pozdrawiam
djafterhour
Nowy
Nowy
Posty: 101
Rejestracja: pt lip 13, 2007 5:12 pm

Re: wykrycie wczytywania

Post autor: djafterhour »

wyobraz sobie duzo przyciskow w scenie kiedys event do przycisku był:

on (press)
{
funkcja();
}
on (press)
{
funkcja();
}
on (press)
{
funkcja();
}
on (press)
{
funkcja();
}
on (press)
{
funkcja();
}
itd... np do 100

a teraz jest w jednej klatce:

Kod: Zaznacz cały

var akcja:Array = ["klatka1", "klatka2", "galeria" ... , "akcja100"];
function onpresuj (){
   for(i=0; i<100;i++)
   {
           this[przycisk+i].i = i;
           this[przycisk+i].onPress = function(){
           funkcja(akcja[this.i);
    };
   };
};
onpresuj();
co lepsze akcja może być wczytywana np z XML czy z pliku tekstowego
LHT
Posty: 13
Rejestracja: sob maja 10, 2003 12:46 am

Re: wykrycie wczytywania

Post autor: LHT »

działa, potrzebne było przeprogramowanie butonów na funkcje :)
funkcje mnie osaczyły
ODPOWIEDZ