Auf das Ende eines Mc's warten

pat_morita

Mitglied
Hi, ich habe in meiner dynamischen Galerie ein kleines Problem.

Ich lade die Bilder mit den Infos aus einer XML Datei. Sie werden jedesmal bei einem Klick auf den "weiter-Button" geladen. Um die Bilder liegt ein Haarlinien-Rahmen (mc_bildrahmen; 2 labels: Animation auf "quer" und "hoch"). Jetzt will ich, daß die Bildrahmen-Animation abgespielt wird, bevor die Bilder dargestellt werden.
Wie überprüfe ich das Ende der Bildrahmen-Animation? Habe schon versucht, ne globale Variable am Ende der Animation (über Timeline) zu übergeben, aber das funktioniert nicht :/

hier der Code des Buttons

PHP:
weiter_btn.onRelease = function() {
	if (geladen && aktbild<anzahl-1) {
// Lese Formatangabe aus XML Datei 0=Querformat / 1=Hochformat
		format=mein_xml.firstChild.childNodes[aktbild].attributes.format;
// Lese Formatangabe des nächsten Formats und vergleiche mit aktuellem
		nextformat=mein_xml.firstChild.childNodes[aktbild+1].attributes.format;
		if (format!=nextformat) {
			if (nextformat==0){
				_root.mc_Bildrahmen.gotoAndPlay("quer");
			}
			if (nextformat==1){
				_root.mc_Bildrahmen.gotoAndPlay("hoch");
			}
//HIER MUESSTE ICH AUF DAS ENDE DES MC_BILDRAHMEN WARTEN, aber WIE?		
aktbild++;
ladeBild(aktbild);
		}
		
	}
};

jemand ne Idee oder sehe ich gerade den Wald vor lauter Bäumen nicht?

Gleich noch eine zweite Frage dazu.

Momentan lese ich die Formate über eine Variable in der XML datei ein (format, 0 und 1 für quer und hoch). Gibt es eine Möglichkeit, die größe des Bildes, das über meine Funktion ladeBild in den bild_mc container geladen wird, auszulesen und den Bildrahmen anzupassen, aber so, daß er vom jetzigen Format auf das anzupassende format animiert wird? Für sowas kann ich ja keinen mc vorbereiten :/

lg, Pat
 
Hi,

rufe am Ende der Bildrahmenanimation einfach eine Funktion auf, die die gewünschte Aktion durchführt:
Code:
// im letzten Frame des Bildrahmenanimation:
stop();
_root.mc_der_deinen_button_code_enthält.nextImage();

Dort legst Du nun diese Funktion an:
Code:
weiter_btn.onRelease = function() {
    if (geladen && aktbild<anzahl-1) {
// Lese Formatangabe aus XML Datei 0=Querformat / 1=Hochformat
        format=mein_xml.firstChild.childNodes[aktbild].attributes.format;
// Lese Formatangabe des nächsten Formats und vergleiche mit aktuellem
        nextformat=mein_xml.firstChild.childNodes[aktbild+1].attributes.format;
        if (format!=nextformat) {
            if (nextformat==0){
                _root.mc_Bildrahmen.gotoAndPlay("quer");
            }
            if (nextformat==1){
                _root.mc_Bildrahmen.gotoAndPlay("hoch");
            }
        }
    }
}

function nextImage() {        
    aktbild++;
    ladeBild(aktbild);
}

Gruß
.
 
ah *gegen-den-kopf-hau*, klar
Einfach das Laden des Bildes in ne Funktion auslagern.
Danke!

Nur liegt der Button Code nicht auf einem MC sondern auf der Timeline mitsamt den ganzen Bildladefunktionen, muß ich die dann alle global definieren, wenn ich den Code auslagere?

und:
Gleich noch eine zweite Frage dazu.

Momentan lese ich die Formate über eine Variable in der XML datei ein (format, 0 und 1 für quer und hoch). Gibt es eine Möglichkeit, die größe des Bildes, das über meine Funktion ladeBild in den bild_mc container geladen wird, auszulesen und den Bildrahmen anzupassen, aber so, daß er vom jetzigen Format auf das anzupassende format animiert wird? Für sowas kann ich ja keinen mc vorbereiten :/
 
Jupp! :)

Ich hatte nur "mc_der_deinen_button_code_enthält" geschrieben, weil ich nicht wissen konnte, wo sich dieser Code befindet.

Gruß
.
 
ah super, vielen Dank.

bin in der Arbeit, deshalb kann ichs net testen ;)

Gleich noch eine zweite Frage dazu.

Momentan lese ich die Formate über eine Variable in der XML datei ein (format, 0 und 1 für quer und hoch). Gibt es eine Möglichkeit, die größe des Bildes, das über meine Funktion ladeBild in den bild_mc container geladen wird, auszulesen und den Bildrahmen anzupassen, aber so, daß er vom jetzigen Format auf das anzupassende format animiert (und nicht einfach nur vergrößert) wird? Für sowas kann ich ja keinen mc mit fixen Animationen vorbereiten :/

lieben Gruß,
Pat
 
Hi,

auf die Maße eines Bildes kannst Du erst zugreifen, wenn das Bild (loadMovie-Methode) komplett geladen wurde. Du müsstest das Bild also im Hintergrund laden, auf die Maße warten, dann Deinen Rahmen skalieren und zuletzt das Bild anzeigen.

Alternativ könntest Du die Maße natürlich auch schon manuell in die XML-Datei eintragen (bzw. wenn diese durch ein Script generiert wird, serverseitig eintragen):
XML:
<bild src="bild01.jpg" width="320" height="240" />

Gruß
.
 
Zuletzt bearbeitet von einem Moderator:
Du müsstest das Bild also im Hintergrund laden,.

...sprich den container auf unsichtbar,dann laden
PHP:
bild_mc.visible=false;

auf die Maße warten

wie lese ich die aus, wenn im bild_mc mein Bild liegt? (hab da noch keine Erfahrung mit, nie benutzt)

edit: geht das so?
PHP:
//die Bilder werden in bild_mc geladen, mc_bildrahmen ist der Rahmen darum
var breit =_root.bild_mc._width; 
var hoch =_root.bild_mc._height;
_root.mc_bildrahmen._width=breit;
_root.mc_bildrahmen._height=hoch;

//in variablen geschrieben, weil ich die noch woanders brauche

dann Deinen Rahmen skalieren

ich weiß wie ich den Rahmen mit den gelesenen werten setze, aber dann wird er ja nicht animiert (von bspw. quer zu hoch), wie stelle ich das an? Scheint ja etwas komplizierter zu sein. Man müßte ja dann eigentlich Breite und Höhe vom aktuellen UND nächsten Bild irgendwie auslesen... oder kann man die Rahmengröße dann verwenden? Hm. Könnte es so gehen (theorie, nich tgetestet, kann ich erst heute abend)

PHP:
//im vorfeld wurde schon das neue Bild geladen, unsichtbar geschaltet, aber der Rahmen des bisherigen ist noch da und sichtbar

//rahmengroesse auslesen
var rahmenbreit=_root.mc_bildrahmen._width;
var rahmenhoch=_root.mc_bildrahmen._height;

//bildgroesse des unsichtbaren bildes auslesen
var breit =_root.bild_mc._width; 
var hoch =_root.bild_mc._height;

//Rahmenhöhe animieren
if (hoch != rahmenhoch) {
	if (hoch>rahmenhoch) {
		while (hoch>rahmenhoch) {
			rahmenhoch++;
		}
	}
	if (hoch<rahmenhoch){
		while (hoch<rahmenhoch){
			rahmenhoch--;
		}
	}	
};

//Rahmenbreite animieren
if (quer != rahmenquer) {
	if (quer>rahmenquer) {
		while (quer>rahmenquer) {
			rahmenquer++;
		}
	}
	if quer<rahmenquer){
		while (quer<rahmenquer){
			rahmenquer--;
		}
	}	
};

und zuletzt das Bild anzeigen.

PHP:
bild_mc.visible=true;

Alternativ könntest Du die Maße natürlich auch schon manuell in die XML-Datei eintragen (bzw. wenn diese durch ein Script generiert wird, serverseitig eintragen):
XML:
<bild src="bild01.jpg" width="320" height="240" />

auch ne gute Idee!! :) Das andere würde mich nur mehr reizen. Werde das aber so einbauen, wenn sich das andere als unmöglich gestaltet

Lieben Gruß
Pat
 
Zuletzt bearbeitet von einem Moderator:
Hi,

als "unmöglich" wird es sicher nicht herausstellen, aber Du musst die Struktur Deines Films wahrscheinlich komplett ändern (bzw. neu aufbauen).

Prinzipiell würde ich mit einem MovieClipLoader arbeiten, der die Clips in einen verschachtelten Container lädt, bei Aufruf des onLoadInit-Ereignisses das Skalieren des Rahmens anstoßen und von dort aus das Einblenden des Bildes. Der Rahmen sollte in diesem Fall nicht mit einem Tweening, sondern per Script erstellt und skaliert werden.

Gruß
.
 
hm, das geht mir wahrscheinlich zuweit über mein aktuelles Wissen (deshalb die drastische Formulierung "unmöglich") :)

Funktioniert es nicht auch so?
(bzw. kann ich mit der While-Schleife da drin animieren?)

PHP:
// Weiter Schalter

weiter_btn.onRelease = function() {
	if (geladen && aktbild<anzahl-1) {
		//Bild_MC unsichtbar Schalten
		bild_mc.visible=false	
		//Nächstes Bild laden, aber der Rahmen, da exra MC (bildrahmen_mc) bleibt ja
		aktbild++;
		ladeBild(aktbild);

		//rahmengroesse auslesen
		var rahmenbreit=_root.mc_bildrahmen._width;
		var rahmenhoch=_root.mc_bildrahmen._height;

		//bildgroesse des unsichtbaren bildes auslesen
		var breit =_root.bild_mc._width; 
		var hoch =_root.bild_mc._height;

		//Testen ob der Rahmen eine andere Groeße hat als das geladene Bild
		if (hoch!=rahmenhoch ODER quer!=rahmenquer)
			//Rahmenhöhe animieren
			if (hoch != rahmenhoch) {
				if (hoch>rahmenhoch) {
					while (hoch>rahmenhoch) {
						rahmenhoch++;
					};
				};
				if (hoch<rahmenhoch){
					while (hoch<rahmenhoch){
						rahmenhoch--;
					};
				};	
			};

			//Rahmenbreite animieren
			if (quer != rahmenquer) {
				if (quer>rahmenquer) {
					while (quer>rahmenquer) {
						rahmenquer++;
					};
				};
				if quer<rahmenquer){
					while (quer<rahmenquer){
						rahmenquer--;
					};
				};	
			};
		//Bild auf sichtbar schalten
		bild_mc.visible=true;
		};
	};
};

lg, Pat
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück