mit einem klick einen mcl schließen, einen anderen öffnen

suntrop

Erfahrenes Mitglied
Hi,

ich habe einen Flash Film, der bei jedem Link einen movieclip in den
Hauptfilm läd.
Ich möchte, dass sobald ein anderer Link gedrückt wird, der bereits
offene movieclip "geschlossen" wird und sich erst dann der neue
clip hinzu läd.
Mit Action Script kenne ich mich nicht so gut aus und bin für ein
bissel Hilfe sehr dankbar.
Das große Problem ist, dass sich ein bereits offener clip erst "ver-
abschieden", d.h. nicht einfach verschwinden, sondern sich
animiert schließen soll.
Ich hoffe ihr versteht was ich meine. Danke euch im Voraus.

P.S.
Sorry für den Titel, aber ich weiß nicht wie ich`s sonst schreiben sollte,
und konnte deshalb auch nicht richtig suchen.
 
Hi,

arbeite da am besten Ereignisorientiert:

Grobe Vorgehensweise:
  • Du sagst Deinem geöffneten Film: "schließeDich()" und setzt zugleich eine globale Variable auf der Hauptzeitleiste mit dem Dateinamen des nächsten zu ladenden Films

  • Die Funktion "schließeDich()" im MC sorgt für die Abbauanimation - wenn diese fertig ist, rufst Du von dort aus auf der Hauptzeitleiste eine "Callback"-Funktion auf: _root.binFertig();

  • Diese Callbackfunktion (auf der Hauptzeitleiste) kann nun den geöffneten aber abgebauten MC löschen und den nächsten laden (der Dateiname ist ja gespeichert und noch bekannt).

Gruß
.
 
Hört sich gut, nur etwas schwer für mich.

Ich versteh nur nicht, wie das allgemein funktionieren soll.
Es muss ja für jeden der möglichen acht clips gleich sein.

Ich habe es so verstanden.
Jeder der acht Links sieht dann in etwa so aus:

on (release) {
gotoAndPlay (120)
}
In Frame 120 geht die Abbauanimation los und dort müsste dann die
Variable definiert werden ( _global.varName = Dateiname; ) und der Film
geschlossen werden.

Und weiter komme ich einfach nicht. Hat so eine "Technik" einen bestimmten
Namen, nach dem ich mal suchen kann, oder kennt jemand ein Tutorial dazu.

Ich muss wohl doch sehr viel mehr Action Script lernen;)
 
Äh ... mal ne generelle Frage:

Lädst Du Deine Inhalte als externe swf-Dateien ein, instanzierst Du sie aus der Bibliothek, oder liegen sie einfach nacheinander auf der Hauptzeitleiste? Im letzteren Fall müsste man etwas anders an die Sache rangehen - und empfehlenswert wäre diese Variante eher nicht, da viel komplizierter und Anfälliger als ein 1-Frame-Layout.

Gruß
.
 
Ich habe die einzelnen movielips als externe SWF-Dateien. Ich denke mal das
es am besten ist, gerade wenn man dann mal was erneuern muss.
 
Hallo nochmal,

ich bräuchte nochmal etwas Hilfe.

Ich habe jetzt am Anfang des Hauptfilms folgende Variable erstellt:
_global.cur_clip = " ";

Und auf jedem der acht Buttons liegt jetzt folgender Code:

PHP:
 on (release) {
    if (cur_clip == " ") {                  	//prüfen ob bereits ein film offen ist
        _global.cur_clip = "dateiname.swf";     //schreibe neuen Clip in die Variable
        loadMovie(cur_clip, 10);                //wenn nein, dann lade diesen Film
    }
	else {
    	cur_clip.gotoAndPlay(120);            		//wenn ja, dann gehe in diesem Clip zu Frame 120...
    	_global.cur_clip = "neuerDateiname.swf"     //... und setzte Name des zu ladenden Clips
	}
 }
In Frame 120 beginnen jeweils die Abbauanimationen und enden
in Frame 165. Dort steht folgender Code:

PHP:
	loadMovie(cur_clip);				  //lade neuen Clip

Der code ist glaube ich die zeitausenddreimillionenvierhundertfünfundsechzigste Möglichkeit die ich ausprobiert habe, aber will einfach immer noch nicht funktionieren.

Ich weiß einfach nicht warum es nicht funktioniert. Ist die Vorgehensweise denn
wenigstens einigermaßen richtig?
Bitte nochmal ein paar Hinweise was ich anders machen muss. Danke.
 
Hi,

1.
Code:
cur_clip.gotoAndPlay(120);
_global.cur_clip = "neuerDateiname.swf"
Du solltest niemals zwei Variablen im selben Gültigkeitsbereich gleich benennen. Das führt bestenfalls zu unvorhersehbaren Fehlern.

2. Wenn der Code zum Laden des nächsten Films im MC "cur_clip" steht, und der neue Film auch in den Container "cur_clip" geladen werden soll, musst Du das im Pfad auch angeben: Entweder mit einem absoluten, oder einem relativen Pfad:
Code:
this.loadMovie(next_clip);
// oder:
_root.cur_clip.loadMovie(next_clip);

Gruß
.
 
Ich glaube du hast mich mißverstanden.
…nächsten Films im MC "cur_clip" steht, und der neue Film auch in den Container "cur_clip" geladen…
cur_clip ist kein Movieclip sondern eine Variable.

Das Problem ist jetzt, dass bei folgendem Code:
Code:
 on (release) {
    if (_global.cur_clip == " ") {                  	//prüfen ob bereits ein film offen ist
		_global.cur_clip = "dateiname.swf";
        loadMovie(_global.cur_clip, 10);         //wenn nein, dann lade diesen Film
		trace(_global.cur_clip);
    }
	else {
    	_global.cur_clip.gotoAndPlay(120);            	//wenn ja, dann gehe in diesem Clip zu Frame 120...
    	_global.cur_clip = "dateiname.swf"     	//... und setzte Name des zu ladenden Clips
	}
 }

...kein Film geladen wird, wenn ich auf einen Link klicke.

Beim ersten Aufruf ist cur_clip leer, d.h. es sollte der erste Teil
der IF-Abfrage zutreffen. Dort wird zuerst dateiname.swf der Variable cur_clip zugewiesen
und im nächsten Schritt sollte per loadMovie eben dieser Film (Dateiname.swf) geladen
werden. Das passiert aber nicht und dort beginnt das Problem. Warum läd
Flash den Film nicht? Die trace Anweisung gibt mir ja den richtigen Wert aus.

Ich habe einfach mal die Dateien in eine ZIP gepackt und angehängt.

Und nochmals vielen Dank für deine Hilfe.
 

Anhänge

... wenn cur_clip kein MovieClip ist, kannst Du auch kein gotoAndPlay darauf ausführen. ;)

Ich glaube, Dein Denkfehler liegt an dieser Stelle:
Code:
var bla = "film.swf";
loadMovie(bla);
jetzt existiert keinesfalls ein MC mit dem Instanznamen des Variableninhalts von "bla", sondern bestenfalls eine "unbenannte" Instanz.

Übrigens: loadMovie erwartet als zweiten Parameter eine Referenz auf einen MC (oder _root), in den der neue Film geladen werden soll. Nummern (sprich: Stufen) gibst Du dagegen bei loadMovieNum an.

Um einen Film einzuladen und dann zu steuern, verwendest Du am besten einen Container:
Code:
var film = "film.swf";
var ct = this.createEmptyMovieClip("ct", 100);
ct.loadMovie(film);

// nach dem Laden:
ct.gotoAndPlay(20);

Gruß
.
 
Das war wohl einer der Fehler :rolleyes:

Ich habe jetzt den richtigen Code. Jedenfalls funktioniert es jetzt.
Code:
 on (release) {
    if (_global.cur_clip == " ") {                  	
		_global.cur_clip = "dateiname.swf";
        _root.instanzname.loadMovie(_global.cur_clip);         
		trace(_global.cur_clip);
    }
	else {
    	_root.instanzname.gotoAndPlay(120);            
    	_global.cur_clip = "dateiname.swf"     	
	}
 }
Allerdings musste ich noch die externen SWF-Dateien so bearbeiten, dass
alles in der Hauptzeitleiste liegt und nicht wie ich es hatte in einem MC.
Weil _root.instantanzname.movieclip.gotoAndPlay(120); anscheinend nicht
machbar ist.

Danke für deine Mühe.
 
Zurück