dyn. ein- u. ausfaden von bilder

ssurfer

Erfahrenes Mitglied
hallo community,

zuerst einmal wollte ich sagen grossartiges forum hier.

so ich bin absoluter flash laie.
trotzdem mal die frage an euch.

ich will in flash per xml bilder einladen die später dann per actionscript in zufälliger reihenfolge ein- u. ausgefadet werden sollen.

ist sowas einfach zulösen? ich wollte xml verwenden weil ich somit felxibel bin um bilder zu löschen o. hinzuzufügen...

ich hab schon ein paar scripts zu thema faden gesehen... nur weiss ich nicht wie ich dann die dateien aus der xml ansprechen soll...

naja vielleicht habt ihr ja ein paar tips für mich o. es gibt ein tutorial irgendwo im netz was ich übersehen habe.

dankeschön schonmal

ssurfer
 
Hi,

im Anhang findest Du ein kleines Beispiel für eine zufällige Slideshow, die Bilder aus einer XML-Datei lädt. Wenn Die Abfolge nach dem Start nicht automatisch weiterlaufen soll, entferne einfach die Funktion "nextPic(nr)".

... aber beachte bitte das nächste Mal die Netiquette bezüglich Groß- und Kleinschreibung!

Gruß
.
 

Anhänge

  • randomgal.zip
    6,9 KB · Aufrufe: 440
sorry wegen der Gorß- und Kleinschreibung.
Gelobe Besserung.

Dein Beispiel sieht nett aus. Nur mal ne ganz dumme frage.
Ich habe die Bildernamen entsprechend deinem Bespiel abgeändert in bild1.....
Die Bilder liegen im selben Verzeichnis wie die *.fl u. die *.xml Datei.
Sollte ja korrekt sein.

Wenn ich nun die FLA-Datei öffne u. sage Film exportieren.
Erscheinen meine Bilder nicht im Film.

Deine "nextPic(nr)" Funktion habe ich gelöscht.

Haste dafür noch nen Tip?

Dank Dir

ssurfer
 
Hi,
  • Poste mal Deine XML (vielleicht hast Du mit den Dateinamen was falsch gemacht, z.B. Groß- und Kleinschreibung vergessen ;) )

  • Flash kann nicht alle JPG-Dateien laden. Versuch mal, die Bilder ohne Optimierung bzw. nicht mit der Option "mehrere Durchgänge" zu exportieren.

Gruß
.
 
ok habs hinbekommen, dass er das nun abspielt.

Nun hab ich noch 2 Kleingkeiten.
Die Funktion "nextPic(nr)" hab ich rausgemacht u. probiert ob er autom. abläuft, geht aber nicht.

Also das Teil sollte am einfachsten, zufällig die Bilder auswählen und die dann horizontal u. vvertikal zentrieren. Den Button kann man ja löschen nehm ich mal an. Ist ja ned zwingend.

Kannste mir da sagen was ich da rauslöschen bzw. hinzufügen muss?

Dank dir

ssurfer
 
Hi,

na ja, die Funktion "nextPic(nr)" ist ja grade dafür gedacht, nach dem Einblenden eines Bildes automatisch das nächste anzuzeigen... wenn Du die rauslöschst, kann es ja nicht mehr gehen (ich habe das deswegen so gepostet, da ich ja nicht wusste, ob die Slideshow automatisch ablaufen soll, oder ob Du jedes neue Bild z.B. über einen Button triggern willst).

Die Slideshow startest Du mit der Funktion "randPic()" (nichts anderes macht der Button) - die musst Du also zumindest einmal beim Start des Filmes aufrufen.

Um die Bilder automatisch zu zentrieren, müsstest Du warten, bis diese geladen sind, um ihre Größe festzustellen. Das kannst Du z.B. in einer onEnterFrame-Methode überprüfen. Wenn Du nun alle Clips [ pic ] an die selbe Position setzt, sollten die Bilder zentriert sein. Am besten, Du lässt eine Variable mitzählen, damit die Slideshow erst beginnt, wenn alle Bilder geladen sind.

Mit der Variable "timeout" stellst Du die Zeit zwischen den Bildern in Milisekunden ein.

Gruß
.
 

Anhänge

  • randomgal.zip
    7,6 KB · Aufrufe: 347
Sehr nett von Dir.
Funktioniert auch einwandfrei.

das this.alpha sagt doch aus wie schnell das Einblenden bzw. Ausblenden von statten geht.

Kann ich auch wo einstellen wie schnell bzw. langsam der Einblende u. Ausblendevorgang dauert?

Und mal was ganz allgemeines kannst du gute Lektüre o. Inet-Seite empfehlen wo Grundlegende Funktionen mit Syntax erklärt sind?

Gruss
ssurfer
 
Nö, this._alpha gibt die momentane Transparenz an. Solche Dinge findet man sehr schnell heraus, wenn man das Wort markiert und F1 drückt. ;) So habe ich Flash zum größten Teil gelernt: Lektüre der Onlinehilfe und Teilname am Forum, daher kann ich Dir auch nicht wirklich ein Buch empfehlen. Hier z.B. findest Du schon mal eine Auswahl; gelesen habe ich keines, aber gehört, dass die Bücher von Matthias Kannengiesser zu empfehlen sein sollen (ob allerdings für Anfänger, kann ich nicht sagen).

Gruß
.
 
alles klar.

Hab vielen Dank für deine Bemühungen.

Und ich muss erneut sagen das Forum ist richtig klasse u. Hilfsbereit.
Da wird nicht gleich auf Anfängern rumgehackt, weil Sie nicht wissen wie Sie etwas bestimmtes machen müssen.

ssurfer
 
Hi,

muss nochmal stören.
Wenn ich die Flashanimation ablaufen lasse im Browser, kommt immer ne Fehlermeldung vom Flash Player, dass ein Script ein eVerzögerung verursacht u. PC zum abstürzen bringen kann. Dann brech ich als ab.
Jedoch läuft die Sache lokal ohne Probleme.

Hier mal die Dateien:
Code:
<img picture="grafik/flash/bild1.jpg"/>
<img picture="grafik/flash/bild2.jpg"/>
<img picture="grafik/flash/bild3.jpg"/>
<img picture="grafik/flash/bild4.jpg"/>
<img picture="grafik/flash/bild5.jpg"/>
<img picture="grafik/flash/bild6.jpg"/>
<img picture="grafik/flash/bild7.jpg"/>
<img picture="grafik/flash/bild8.jpg"/>

und so weiter... die xml liegt im root des Webservers.

die FLA-Datei:

Code:
var pic = new Array();
var current = 0;
var loaded = 0;
var IV = 0;

var centerX = 177; // Mittelpunkt der Bühne!
var centerY = 11;

var timeout = 2000; // Zeit zwischen den Bildern!

var xm = new XML();
xm.ignoreWhite = true;

xm.load("/animation.xml");

xm.onLoad = function() {
	parse(this);
}

function parse(obj) {
	for (var i=0; i<obj.childNodes.length; i++) {
		pic[i] = this.createEmptyMovieClip("pic" + i, i + 512);
		pic[i].ct = pic[i].createEmptyMovieClip("ct", 1);
		pic[i]._alpha = 0;
		pic[i].nr = i;
		pic[i]._x = centerX;
		pic[i]._y = centerY;
		pic[i].go = function() { // Einblenden
			this.onEnterFrame = function() {
				this._alpha += (100 - this._alpha)/6;
				if (this._alpha >= 98) { //98
					this._alpha = 100;
					this._parent.nextPic(this.nr);
					// ruft Funktion zum Anzeigen des
					// nächsten Bildes auf
					delete this.onEnterFrame;
				}
			}
		}
		pic[i].hold = function() { // Ausblenden
			this.onEnterFrame = function() {
				this._alpha += (0 - this._alpha)/6;
				if (this._alpha <= 2) { //
					this._alpha = 0;
					delete this.onEnterFrame;
				}
			}
		}
		pic[i].ct.loadMovie(obj.childNodes[i].attributes.picture);
		pic[i].onEnterFrame = function() {
			if (this.ct._width > 10 && this.ct._height > 10) {
				this.ct._x = -this.ct._width / 2;
				this.ct._y = -this.ct._height / 2;
				this._parent.nextLoaded();
				delete this.onEnterFrame;
			}
		}
	}
}

function showPic(nr) { // Blendet ein Bild ein
	clearInterval(IV);
	if (current != nr) {
		for (var i=0; i<pic.length; i++) {
			if (nr != i) {
				pic[i].hold();
			} else {
				pic[i].go();
				current = i;
			}
		}
	}
}

function nextLoaded() {
	loaded ++;
	if (loaded >= pic.length) randPic();
}

function nextPic(nr) { // Blendet ein zufälliges Bild verzögert ein
	clearInterval(IV);
	do {
		var v = int(Math.random() * pic.length);
	} while (v == nr);
	IV = setInterval(function() { showPic(v); }, timeout);
}

function randPic() { // Blendet ein zufälliges Bild ein
	clearInterval(IV);
	do {
		var v = int(Math.random() * pic.length);
	} while (v == current);
	showPic(v);
}

Vielleicht hast du ja noch eine Idee. Ich wollte das ganze auch mal Debuggen. Aber da erhielte ich keine Fehler. Kann aber auch sein, dass ich den Debugger falsch angewand habe. Hab Schrittweise überprüft.

gruss

ssurfer
 

Neue Beiträge

Zurück