flv als Blende zwischen zwei swfs

Maxheadroom

Grünschnabel
Hallo,

ich hätte da gern mal ein Problem.
Ich versuche ein flv als Blende zwischen zwei Menüs, die ich als einzelne swf-Files schreibe, einzubauen.
Auf Button-Click soll der Film einblenden, durchspielen, und am Ende in das neue Menü überblenden. Bis zum Film bin ich gekommen, aber wie kann ich Flash sagen, kurz vor Ende des Films auszublenden und das nächste swf überhaupt und rechtzeitig zu laden?

Das ist mein bisheriger code:

this.btnFire.onRelease = function() {
attachMovie("mc_fireBurn", "mc_fireBurn", this.getNextHighestDepth());
function blend():Void {
mc_fireBurn._alpha += 5;
updateAfterEvent();
}
mc_fireBurn._alpha = 0;
var nInterval:Number = setInterval(blend, 1);
};

"btnFire" ist der dazugehörige Button, der im Over-Status animiert ist.
"mc_fireBurn" ist der Movie-Clip, in dem mein Film sitzt.
Ein weiteres Problem, das sich zeigt, ist, dass der Film im Zeitraum des Blendens langsamer läuft. Kann man dem abhelfen?

Danke euch.

Grüße M.
 
Hi,

poste bitte mal die Datei, denn als "Trockenübung" ist das recht umständlich zu ersehen...

Gruß

P.S.: und verwende zum Posten bitte Code- oder PHP-Tags, danke!
.
 
Hi,

wenn ich das recht verstanden habe, soll während der Film läuft, der Hintergrund (sprich: das was darunter liegt) gegen einen anderen ausgetauscht werden und der Film soll sich die letzten paar Bilder ausblenden...

Recht einfach würde das z.B. so gehen:

Sag Deinem Clip "mcFireBurn" im ersten Frame, dass er sich einblenden soll, z.B. so:
PHP:
this._alpha = 0;

this.onEnterFrame = function() {
	this._alpha += (100 - this._alpha) / 10;
	if (this._alpha > 95) {
		this._alpha = 100;
		_root.dispatch();
		delete this.onEnterFrame;
	}
}
Wie Du siehst, wird nach dem Einblenden eine Funktion "dispatch" auf _root aufgerufen, die das Umtauschen der Menüs/Hintergründe übernimmt.

Zum Ausblenden packen wir am Ende (sagen wir Frame 90) noch ein Schlüsselbild mit sowas:
PHP:
this.onEnterFrame = function() {
	this._alpha += (0 - this._alpha) / 10;
	if (this._alpha < 1) delete this.onEnterFrame;
}
Somit sparst Du Dir das Rumfummeln mit Intervallen (Da Du Dein Intervall nicht überschrieben hast, hast Du sowieso eine ziemlich üble Rekursion gebaut... ;) ).

Der Code auf der Hauptzeitleiste muss dann lediglich so ausschauen:
PHP:
this.btnFire.onRelease = function() {
	attachMovie("mc_fireBurn", "mc_fireBurn", this.getNextHighestDepth());
}

function dispatch() {
	// Hier die Inhalte austauschen
}
und in der Funktion "dispatch" machst Du eben was Du brauchst, um Dein neues Menü anzuzeigen. Wenn der Film dann ausgeblendet wird, erscheint der neue Inhalt...

Korrigier mich, wenn ich Dich falsch verstanden habe.

Gruß
.
 
Hallo Datic,

danke für die prompte Antwort. Was mir jetzt noch Kopfzerbrechen bereitet ist, die verschiedenen Menüs zum richtigen Zeitpunkt erscheinen zu lassen. Die Reihenfolge soll so aussehen: m1 liegt oben >> der film blendet sich darüber; sobald das alpha des films 100% ist, müssen sich die darunter liegenden menus austauschen, und der film muß abblenden.
Ich wollte ursprünglich für jedes Menü ein eigenes swf, aber ich mache mir damit wohl das Leben unnötig schwer, also pack ich das in ein einziges. Werde versuchen, die Menüs über Masken zu öffnen.
Gibt es die Möglichkeit, über einen "listner"-Befehl das Ende des Films abzufragen, und vorher Aktionen zu starten, an definierten Frames des Films? In der Timeline des flv zu arbeiten scheit mir unpräzise zu sein.
Außerdem ist das flv am anfang (wahrscheinlich während es blendet) immer noch langsamer als im Original, was ich wirklich gerne vermeiden würde. Weißt Du dagegen eine Lösung?

Grüße
 
Hi,

Dein FLV wird (da es als importierer Clip arbeitet) genau wie ein MovieClip mit der Framerate Deines Films abgespielt. Willst Du eine vom Film unabhängige Geschwindigkeit, musst Du mit Streaming arbeiten. ... dann hast Du allerdings noch weniger Kontrolle über das Filmobjekt.

Wie meinst Du das mit dem "Listener"? Wenn Du in die Zeitleiste des Films nichts reinschreiben willst, kannst Du den aktuellen Status von _root aus mit onEnterFrame oder setInterval überprüfen:
PHP:
this.onEnterFrame = function() {
    if (meinfilm._currentframe > meinfilm._totalframes - 15) {
       tauscheAus();
       delete this.onEnterFrame;
    }
}

Noch ein Wort zum Austauschen: Ich würde die einzelnen Bilder einfach in Form von MovieClips übereinander legen und über die _visible-Eigenschaft ein- und ausblenden.

Alternativ könntest Du auf der Bühne einen leeren MC (Container) anlegen, in den Du mit attachMovie den jeweils aktuellen Clip aus der Bibliothek lädtst. Vorteil dieser Variante: einfacher zu warten, wenn sich die Anzahl der Seiten ändert.

Gruß
.
 
Zurück