Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-01-2006, 08:38   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 175
Scripte kombinieren

Hallo Forum,

habe zwei Scripte, die ich gerne miteinander kombinieren möchte. Das erste ist ein normaler Preloader für das Laden einer SWF-Datei mit grafischem Ladebalken. Das zweite ist ebenfalls ein Preloader, der allerdings nur externe Bilder lädt (an dieser Stelle ein GROSSES Dankeschön an "Der Frager").
PHP-Code:
// Script 1: normaler Preloader
ladeIst this.getBytesLoaded();
ladeSoll this.getBytesTotal();
if (
ladeIst>=ladeSoll) {
    
gotoAndPlay("start");
} else {
    
prozente Math.round((ladeIst*100)/ladeSoll);
    
balken.maske._xscale prozente;
    
ausgabe.text "LOADING "+prozente+"%";

PHP-Code:
// Script 2: Preloader für externe pix
var anzahl 7;
var 
0;
var 
0;
function 
preload(vornach) {
    for (var 
1i<=anzahli++) {
        
mc this.createEmptyMovieClip("mc"+ii);
        
mc._alpha 0;
        
wat this.createEmptyMovieClip("watcher"+i100+i);
        
wat.mc;
        
mc.loadMovie(pfad+vor+i+nach+".jpg");
        
wat.onEnterFrame = function() {
            if (
this.t.getBytesLoaded()>=this.t.getBytesTotal() && this.t.getBytesLoaded()>10) {
                
trace(this.t+" geladen");
                
removeMovieClip(this.t);
                
removeMovieClip(this);
                if (++
== anzahl) {
                    if (
== 0) {
                        
//trace("y ="+y+" und x ="+x);
                        
y++;
                        
0;
                        
preload("bild""a");
                    } else if (
== 1) {
                        
//trace("y ="+y+" und x ="+x);
                        
y++;
                        
0;
                        
preload("tn00""");
                    } else if (
== 2) {
                        
//trace("Alle Bilder im Cache...");
                        
gotoAndPlay(_currentframe+1);
                        
trace("y ="+y+" und x ="+x);
                    }
                }
            }
        };
    }
}
preload("bild"""); 
Habe Schwirigkeiten dabei, die getBytesTotal() zu ermitteln und was damit einhergeht.
Sicher habt Ihr schon eine Idee.

Gruß und Danke,
Chris
*perplex* ist offline   Mit Zitat antworten
Alt 25-01-2006, 08:59   #2 (permalink)
tracer
 
Benutzerbild von andretti
 
Registriert seit: Jun 2004
Beiträge: 4.415
aloha!
wie meinst du das mit "verbinden"?

de flashplayer kann immer nur ein teil nach dem andren laden;
__________________
Viola per Sempre
Alle Angaben ohne Gewehr!
trace your open mind in variables !
andretti
ActionScript Dictionary
andretti ist offline   Mit Zitat antworten
Alt 25-01-2006, 09:10   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 175
Hallo andretti,
entschuldige meine unpräzise Ausdrucksweise. Ich möchte, dass der Film erst dann abgespielt wird, wenn er:
a) selber geladen ist (logisch) und
b) die externen Bilder, die im Film verwendet werden, im Cache liegen, damits während dem Abspielen nicht so lange dauert, bis das Bild dann da ist.

Dazu muss ich anfangs die gesamte zu ladende Byte-Anzahl ermitteln, also:
a) vom Film selbst (z.B. 26 KB) und
b) von den externen Bildern (z.B. 863 KB oder sonstwas)
26 + 863 = 889
An diesen 889 KB müsste sich dann mein Ladebalken inkl. Prozentanzeige orientieren. Und erst, wenn er die hat gehts mit gotoAndPlay("start"); weiter.

Gruß
Chris
*perplex* ist offline   Mit Zitat antworten
Alt 25-01-2006, 09:12   #4 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Er will sicher das der "normale" Preloader auch externe Graphiken laden kann.

*ein bisel langsam

Ich könnte mir vorstellen in einer Schleife für jedes Bild einen MovieClipLoader zu erstellen und von diesem die bytesTotal abfragen. Die Summe aus allen ist dann die Menge an Bytes die zur Größe des Films noch hinzu kommt. Den Status kann man ja dann in einer weiteren Schleife durch aufsummieren der bytesLoaded errechnen
__________________
ein mensch ohne macke ist kacke...

Geändert von DaKinel (25-01-2006 um 09:17 Uhr)
DaKinel ist offline   Mit Zitat antworten
Alt 25-01-2006, 09:15   #5 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 175
Zitat:
Zitat von DaKinel
Er will sicher das der "normale" Preloader auch externe Graphiken laden kann.
Genau!
*perplex* ist offline   Mit Zitat antworten
Alt 25-01-2006, 09:41   #6 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 175
@ DaKinel
zu Deiner Änderung von Thread #4:
Ich denke, Du bist da auf dem richtigen Weg. Aber ist das nicht schon (zumindest teilweise) im Script 2 umgesetzt?
Sorry, aber ich brauch da wohl noch nen Denkanstoß

Gruß
Chris
*perplex* ist offline   Mit Zitat antworten
Alt 25-01-2006, 10:29   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Hier mal meine Variante:
PHP-Code:
int NULL;
mcLoader = new Array();
mClip = new Array();
bTotal 0;
bLoaded 0;
amImages 10;
iPath 'pictures/';
inited 0;

init();

function 
init() {
 for(
i=0i<amImagesi++) {
  
mClip[i] = this.createEmptyMovieClip('temp'+ii);
  
mcLoader[i] = new MovieClipLoader();
  
mcLoader[i].loadClip(iPath+i+'.jpg'mClips[i]);
  
mcLoader[i].onLoadInit = function(target) {
   
progress mcLoader[i].getProgress(target);
   
bTotal += progress.bytesTotal;
   
inited++;
   if(
inited == amImages) {
    
bTotal += _root.getBytesTotal();
    
int setInterval(setProgress83.33NULL);
   }
  }
 }
}

function 
calclulateLoaded() {
 
bLoaded 0;
 for(
i=0i<amImagesi++) {
  
progress mcLoader[i].getProgress(mClip[i]);
  
bLoaded += progress.bytesLoaded;
 }
 
bLoaded += _root.getBytesLoaded();
}

function 
setProgress() {
 
calculateLoaded();
 if(
bLoaded>=bTotal) {
  
clearInterval(int);
  for(
i=0i<amImages;i++) {
   
removeMovieClip($mClip[i]);
  }
  
//Ladevorgang beendet und Abbruch des Ladevorganges
 
} else {
  
//Statusanzeige aktualisieren
 
}

Alles ungetesten und ohne Gewähr. Ist halt nur ne Möglichkeit die sicherlich nicht all zu sauber ist...
__________________
ein mensch ohne macke ist kacke...

Geändert von DaKinel (25-01-2006 um 12:29 Uhr)
DaKinel ist offline   Mit Zitat antworten
Alt 25-01-2006, 11:12   #8 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 175
@ DaKinel,
vielen Dank für Deine Bemühungen.
Leider muss ich gestehen, das ich Dein Script nicht verstehe.
Dennoch entnehme ich dem Ganzen, das es nicht in der gewünschten Weise funktionieren wird. Sorry
Grund dafür ist folgender:
in meinem 2.ten Script werden Bilder mit unterschiedlichen Benamungen geladen. Diesen Punkt vermisse ich bei Dir.
Vielleicht hast Du ja dafür noch eine Lösung parat.

Danke,
Chris
*perplex* ist offline   Mit Zitat antworten
Alt 25-01-2006, 12:28   #9 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Ich würd das alles noch etwas anders angehen.
Ich würde mir von einem PHP-Skript den Ordner in welchem die Bilder liegen auslesen lassen. Die Liste der Bilder im Ordner würde ich zum Film übertragen und dort auswerten. Nun hätte man eine aktuelle Liste aller Bilder mit Namen und kann daraus ein Array erstellen weches die Daten zu den Bildern enthält. Das PHP-Skript könne schon die Bildinformationen mit auslesen, so das Bildabmaße, Bildgröße, etc. schon vorhanden sind und nicht erst umständlich in Flash ermittelt werden müssen.
Dann würde ich vielleicht nicht alles mit einem Preloader laden lassen, sondern das ganze in verschiedene Teile aufsplitten. Zum Bsp. einen Teil der den Ladestatus des PHP-Skriptes anzeigt, einen der den Ladestatus der Bilder wiedergibt und einen der den Haupfilm-Ladestatus zeigt.
Ist aber alles nicht das was du suchst.

Frage ist, ob du die Namen der Bilder zum Zeitpunkt des Ladevorganges kennst. Wenn ja ist es ein Leichtes dies in mein angegebenes Skript zu integrieren.

Erklärungen zum Skript:
1. Was die Variablendefinitionen am Anfang bedeuten sollte klar sein
2. Die Funktion init() macht nix weiter, als zwei Arrays zu füllen. Das erste Array mClip enthält die temporär erstellten MC's in die die Bilder geladen werden. Diese MC's werden nach Beendigung des Ladevorganges wieder entfernt. Das zweite Array mcLoader enthält jeweils eine Referenz auf das MovieClipLoader-Objekt das erstellt wurde. Das MovieClipLoader Objekt wird erstellt um den Ladestatus des Bildes später abfragen zu können.
Von jedem MovieClipLoader-Objekt wird die Methode onLoadInit() aufgerufen um den Start des Ladeforganges eines Bildes zu empfangen. In der Methode wird geprüft ob schon alle Bilder gestartet wurde. Ist dem so, wird ein neues Intervall gesetzt, welches aller 83,33 Millisekunden (das ist die Framerate bei 12 Bildern/s) die Funktion set Progress aufruft. Das Resultat ist nichts anderes, als der Aufruf der Methode onEnterFrame.
3. Die Funktion calculateLoaded() errechnet die aktuell geladenen Bytes. Es wird einfach nur das Array mcLoader durchlaufen und jeweils der aktuelle Ladestand jedes einzelnen Bildes abgerufen. Alle Ladestati werden zusammenaddiert und ergeben den aktuellen Gesamtladestatus.
4. Die Funktion setProgress() sollte selbsterklärend sein.
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 25-01-2006, 12:37   #10 (permalink)
tracer
 
Benutzerbild von andretti
 
Registriert seit: Jun 2004
Beiträge: 4.415
Zitat:
Zitat von *perplex*

Dazu muss ich anfangs die gesamte zu ladende Byte-Anzahl ermitteln, also:
a) vom Film selbst (z.B. 26 KB) und
b) von den externen Bildern (z.B. 863 KB oder sonstwas)
26 + 863 = 889
An diesen 889 KB müsste sich dann mein Ladebalken inkl. Prozentanzeige orientieren. Und erst, wenn er die hat gehts mit gotoAndPlay("start"); weiter.

Gruß
Chris
genau das geht eben nicht......

du kannst nur mal den mutterfilm vorladen;
wenn geladen, dann mit den bildern mittels schleife laden, und dann halt erst zu frame (beispiel) 2 springen;
und wenn du das mit einem ladebalken machen möchtest, müsstest du die einzelnen anteile der elemente(mutterfilm,bilder) ausrechnen und diese dann noch durch hundert dividieren, und dass dann wachsen lassen, aber des is uuurkompliziert(wenns überhaupt geht)
eventuel nur einen balken verwenden und diesen um 1 pixel pro geladenen prozent wachsen lassen(wenn zu viele bilder, dann schlecht...)
oder den balken von haus aus klein halten, und immer, wenn er per ._xscale = 100(also wenn gerade mal wieder 100 prozent geladen wurden), diesen balken an den vorgänger attachen, und sofort wieder per._xscale die aktuellen prozent zuweisen, and so on, and so on...

ich hoffe, des war ein wenig verständlich und auch hilfreich;
__________________
Viola per Sempre
Alle Angaben ohne Gewehr!
trace your open mind in variables !
andretti
ActionScript Dictionary

Geändert von andretti (25-01-2006 um 12:47 Uhr)
andretti ist offline   Mit Zitat antworten
Alt 25-01-2006, 13:30   #11 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 175
@ DaKinel

ok, dank Deiner Erklärung leuchten mir schon mal wenigstens einige Punkte ein. Zu Deiner Frage: Der Namen der Bilder IST mir vorher bekannt. Die Bilder haben immer den gleichen Pfad und heißen:
PHP-Code:
1. "bild"+i+".jpg"
2. "bild"+i+"a.jpg"
3. "tn00"+i+".jpg" 
Bei mir war/ist die Variable anzahl für die Menge an Bildern zuständig.
Verstehe noch nicht so ganz, wo in Deinem Script die Ladeanzeige (Balken und Prozente) ausgegeben werden.
Schon mal vielen Dank an Dich!


@ andretti
Zitat:
Zitat von andretti
eventuel nur einen balken verwenden und diesen um 1 pixel pro geladenen prozent wachsen lassen
Von mehr als einem Balken war auch von meiner Seite keine Rede.

Ich möchte an dieser Stelle auch noch mal was klarstellen: Meine beiden Scripts funktionieren, solange sie unabhängig laufen. So schwer kann das eigentlich gar nicht sein, die zusammen zu bringen. Anbei mal meine Dummy-FLA. Auf der Ebene as im dritten Frame spielt sich das bei mir ab. Script 2 ist derzeit auskommentiert, da die ja (momentan) nicht zusammen laufen. Bilder hab ich jetzt nicht dabei, wäre sonst von der Datenmenge zu viel. Kann man aber leicht improvisieren: Dummy-Bild nach oben genanntem Schema 3x abspeichern und die Variable anzahl entsprechend reduzieren.

Danke für Eure Mühe!
Chris
Angehängte Dateien
Dateityp: zip preloader.zip (12,7 KB, 5x aufgerufen)
*perplex* ist offline   Mit Zitat antworten
Alt 25-01-2006, 15:13   #12 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Was andretti dir sagen wollte ist, du kannst keine Bilder vorausladen wenn die Bühne noch nicht da ist. Das heist im Klartext, du musst zuerst _root.getBytesLoaded() abfragen und erst wenn die Bühne zu 100% geladen ist kannst du auch Bilder laden. Es ist also schwerlich möglich alles zusammen in einem Preloader unterzubringen und deshalb auch andrettis Argumentation mit dem großen Aufwand.
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 25-01-2006, 15:19   #13 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 175
Aber dafür muss es doch ne Lösung geben!!!

Vielleicht den Preloader in den Hauptfilm stecken. Dann müsste dieser aber wissen, welche Bilder geladen werden sollen.

Das ganze erweist sich so langsam als never-ending story. Wenn Ihr wüsstet, wie lange ich jetzt schon mit dieser Preloader-Geschichte kämpfe...

Chris
*perplex* ist offline   Mit Zitat antworten
Alt 25-01-2006, 15:25   #14 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Nun ja, wenn du in deinem Film keine Objekte in der Bibliothek hast die im ersten Frame deines Filmes geladen werden, kannst du dort deinen Preloader erstellen. Wenn sich im ertsen Frame nix weiter als dein Preloader befinet, dann sollte der ertse Frame auch nicht großer als 500 Byte sein. 500 Byte ist eine Größe die man bei heutigen Internetverbindungen vernachlässigen kann. Im Endeffekt musst du nur von _root.getBytesTotal() die Größe des ersten Frames abziehen und schon kommt alles wieder hin.
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 25-01-2006, 15:52   #15 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 175
@ DaKinel:
Aha, und was heisst das jetzt? Sorry, aber ich verstehe nur noch Bahnhof
Kannst Du Dir vielleicht mal meine Dummy-Datei ansehen und mir dann gezielt sagen, was ich wo und wie platzieren muss?
Ich check das einfach nicht.

Danke,
Chris

PS: ich brauch doch allein für den Preloader schon Objekte aus der Bibliothek (Ladebalken & Maske, die den Balken anwachsen lässt) Woher weiss ich eigentlich wie groß ein einzelner Frame ist?

Geändert von *perplex* (25-01-2006 um 15:56 Uhr)
*perplex* ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele