Bilder dynamisch laden in Flash MX

Thema:
Bilder dynamisch laden in Flash MX
Description:
Bilder laden
Keywords:
Flash MX, Bilder, images, jpg, laden, dynamisch
Author:
www.freaky-flash.de   ::: sonja vieten :::
Date:
16.05.2002
Doc-ID:
43-001
URL:
http://www.flashworker.de/tutorial/46/001.html
Version:
1.0
Vorkenntnisse:
Flash+Action-Script fortgeschritten
Download:
PC: "loading_img.zip", 40 kB

  Was bringt die neue Möglichkeit?

  Bilder dynamisch laden

  Bilder in leere Movieclips laden


Was bringt die neue Möglichkeit?

Die neue Möglichkeit, Bilder (jpgs) dynamisch in Flash hineinzuladen, hat beispielsweise den Vorteil, nicht mehr den umständlichen Weg über "Datei/Importieren..." zu gehen. Der exportierte swf Film bleibt sehr klein und wird schnell geladen. Bilder können zur Laufzeit geladen werden, wenn sie benötigt werden. Die Aktualisierung von Bildergalerien etc. gestaltet sich viel einfacher. Man braucht nicht mehr den Flash Film zu öffnen und darin Anpassungen vornehmen, um Bilder auf den aktuellsten Stand zu bringen, sondern spielt einfach immer nur die neuen Bilder auf....Und so weiter...

BEISPIEL FILM

In diesem Tutorial stelle ich die neue Möglichkeit vor, besonders in Hinblick auf die Erstellung von eigenen Funktionen, die das Laden und Manipulieren der Bilder vereinfacht. (Bei allen Beispielen wird davon ausgegangen, dass der Film und die Bilder im gleichen Ordner liegen)



Bilder dynamisch laden

Bilder werden mit dem Befehl
loadMovie("bildbezeichnung.jpg",1);

geladen. Wenn dieser Befehl im ersten frame auf der Hauptzeitleiste steht, geschieht Folgendes: Das Bild wird in Ebene 1 geladen und an der linken oberen Ecke ausgerichtet. Nennt man als Ziel jedoch einen Movieclip wird das Bild an der linken oberen Ecke des Ziel-Movieclips ausgerichtet, z.B.
loadMovie ("bild1.jpg",meinmc);

Voraussetzung ist hier, dass es einen mit "meinmc" benannten Movieclip auf der Bühne gibt, sonst läuft die Zielangabe ins Leere. Um die Positionen der zu ladenden Bilder bestimmen zu können, ist es einfach, vorher entsprechend viele movieclips auf der Bühne zu haben, die als Ziel für die Bilder herhalten. Jeder Movieclip muß dabei eindeutig benannt werden, damit jedem einzelnen Bild einen eigenen "Container" zugewiesen werden kann. Außerdem hat diese Variante den Vorteil, dass den Movieclips alle gewohnten Aktionen zugewiesen werden können. Die Bilder verhalten sich sozuagen wie Movieclips und können entsprechend manipuliert werden.(Größe/Skalierung/Position/ziehbar machen etc.)

Hier ist das Tutorial zu Ende für alle, denen diese Auskunft reicht. Weiter geht es für die Faulen unter uns mit der neuen Möglichkeit, Bilder in nicht manuell angelegte Movieclips zu laden, d.h. die Arbeit Flash übernehmen zu lassen.

BEACHTEN BEIM DYNAMISCHEN LADEN: Bilder dürfen nicht im progressiven Kodierverfahren komprimiert werden (d.h. in mehreren Durchgängen) , sonst werden sie NICHT angezeigt, bzw. geladen in Flash!



Bilder in leere Movieclips laden

Der Film oben habe ich so erstellt. Die Original Flash Datei enthält den gesamten nötigen Action-Script Code in nur einem Frame, dem ersten auf der Haupt-Timeline. So kann man viel schneller den Code bearbeiten und anpassen, ohne lange rumzusuchen.
Die Anweisung für Flash, einen Movieclip zu erzeugen, in den ein Bildsozusagen hineingeladen wird, lautet
createEmptyMovieClip("mccontainer",1);
mccontainer.loadMovie("bild1.jpg");

Es wird ein leere MovieClip erzeugt, den man benennen muß (hier "mccontainer"). Er wird auf Ebene 1 geladen. Dort hinein wird das Bild geladen in der zweiten Anweisung. Anschließend kann man "mccontainer" wie gewohnt Anweisungen erteilen. Beispiel:

mccontainer._x=150; //Da alle per createEmptyMovieClip erzeugten Clips automatisch an der linken oberen Ecke des Films ausgerichtet werden muß man angeben, wo die MCs letztendlich positioniert werden sollen im Film.

Wenn ich jedoch viele Bilder laden möchte, wird es aufwendig, jedesmal die entsprechenden Anweisungen zu erteilen. Außerdem muß man für 50 Bilder auch erstmal 50 Movieclips anlegen. Die Arbeit kann man sich sparen, indem man zum Beispiel Schleifen mit Variablen einbaut, die die Arbeit übernehmen.
Im Filmbeispiel gibt es 8 Bilder (bild1.jpg.-bild 8.jpg), die in von Flash erzeugte Movieclips geladen werden (box1-box8). Die variable i ersetzt also einfach die jeweilige Zahl und die Schleife arbeitet die Zahlen 1-8 ab. Fertig ist die Anweisung fürs Bilder laden:

for (var i=1;i<9;i++){
createEmptyMovieClip ("box"+i,i);
//es werden soviele MCs wie benötigt erzeugt, und auf JEWEILS EINE EIGENE Ebene gelegt
_root["box"+i]._x=i; 
//diese Zeile kann man auch weglassen, alle MCs werden dann automatisch bei 0 positioniert
_root["box"+i].loadMovie ("bild"+i+".jpg");
}


Mit dieser Anweisung kann ich jederzeit soviele Bilder laden wie ich möchte, für 100 Bilder muß ich die jpgs nur entsprechend benennen ("bild1.jpg"-"bild.100.jpg"). Die Schleife sollte dann natürlich bei i<101 stoppen.

Da die Bilder bzw. Movieclips zunächst alle übereinander liegen, muß ich die Anweisung für die Positionierung erteilen. Im Beispiel werden sie beim Klicken auf den Movieclip "nebeneinander" auch nebeneinander gestellt.

//Vorgaben für Abstand und Y-Position werden zunächst definiert
abstand=100;
POSY=10;

//Funktion für den MovieClip "nebeneinander", wird nur auf Klick ausgeführt
nebeneinander.onPress = function () {
for (var i=2;i<10 ;i++) {
_root["box" +i]._x=(_root["box" +(i-1)]._x)+abstand;
_root["box" +(i-1)]._y=POSY;
}
}

Man kann diese Funktion beispielsweise auch mit der ersten Anweisung kombinieren, um die Bilder bereits beim Laden an ihre richtigen Position anzuzeigen.

In der downloadbaren Flash Datei befinden sich noch zwei kommentierte Beispiele, wie man die Movieclips per Benutzereingabe skalieren und auf Originalgröße zurücksetzen kann.

Es ist also mittlerweile möglich, völlig dynamische Bildergalerien zu erzeugen, ohne jemals nochmal in die Flash-Datei "hinein zu müssen". Man kann die Funktion für die Positionierung z.B. so abwandeln, dass die Bildern in Reihen und Spalten gezeigt werden, oder man läßt die Bilder gestapelt und blättert durch die Ebenen (jeder Movie Clip mit Bild liegt auf einer eigenen Ebene) mit einem Vor- und Zurück- Button, alles ist möglich. Das Erstellen des Codes scheint zunächst aufwendig, aber dafür ist die Pflege und Aktualisierung später Sekundensache.