Parameter eines geladenen Films ermitteln

M

Matthias_Nordwig

Hallo allerseits.

Ich möchte die Breite und Höhe eines dynamisch geladenen Films ermitteln.
An der Stelle wo ich trace möchte ich eigentlich die breite des Films "mc", den namentlich ich oben als Parameter erhalte ermitteln.
Zweck: Ich möchte einen Film beliebiger Größe skallieren, das er nicht die gewünschte Maximalgröße überschreitet und trotzdem sein x/y-Verhältniss beibehält.

Hier der Code:

Code:
//------------------------------------------
//class page
//------------------------------------------
page = function(fill,line,destination,name,deep,mc,xscale,yscale){	
	this.fill=fill;	
	this.line=line;
	this.movie=destination.createEmptyMovieClip(name,deep);

	this.movie.createEmptyMovieClip("objo",1);
	this.movie.objo.createEmptyMovieClip("mc",1);
	this.movie.objo.mc.createEmptyMovieClip("clip",1);
	this.movie.objo.mc.clip.createEmptyMovieClip("container",1);
	this.movie.objo.mc.clip.container.loadMovie(mc);

	this.movie.objo.mc.clip.container._xscale=xscale;
	this.movie.objo.mc.clip.container._yscale=yscale;

	this.movie.createEmptyMovieClip("obju",2);
	this.movie.obju.createEmptyMovieClip("mc",1);
	this.movie.obju.mc.createEmptyMovieClip("clip",1);
	this.movie.obju.mc.clip.createEmptyMovieClip("container",1);
	this.movie.obju.mc.clip.container.loadMovie(mc);
	
	this.movie.obju.mc.clip.container._xscale=xscale;
	this.movie.obju.mc.clip.container._yscale=yscale;
	trace(this.movie.obju.mc.clip.container._width);
}

Object.registerClass("page",page);
//------------------------------------------

Achso was ich noch dazu sagen wollte: An der Stelle wo ich trace gibt er 0 aus.
Ausserdem möchte ich bewusst keine Kombinationen mit JScript. Und mir ist auch bewusst, das die Filmparameter zum Zeitpunkt des Ladens noch nicht initialisiert sind.
Aber vielleicht hat ja doch wer eine feine Lösung. Eine zeitlich versetzte Abfrage geht leider auch nicht, da es sich um ausgelagerte Objekte handelt.
 
Zuletzt bearbeitet von einem Moderator:
Hallo!

Danke erstmal für die Antwort. Aber diesen Thread hatte ich mir bereits durchgelesen. Und es ist nur bedingt das selbe Prob. bzw. wurde das Prob dort nicht wirklich gelöst. Es ist schlichtweg und ergreifend Fakt, dass man die Parameter eines soeben geladenen "was auch immer" nicht unmittelbar abfragen kann, da Sie erst wieder initialisiert werden müssen, der Code jedoch schneller in der Ausführung ist. Ich habe mir gedacht man könnte da etwas gescheites mit Listenern erreichen. Dummerweise sind die Listener für MovieClips eher bescheiden. Lasse ich mir die Parameter zu eim späteren Zeitpunkt im Film ausgeben sind Sie vorhanden. Aber Ich möchte das ganze halt auslagern und nicht von irgendwelchen Zeitraffern abhängig machen.

Übrigens habe ich etwas sehr merkwürdiges herausgefunden. Beim tracing im folgenden Code, wird ausgegeben, dass alle Frames geladen sind(1/1), die Objektweite ist jedoch noch nicht innitialisiert. Geschieht das etwa auch erst nach dem "betreten" des Frames?
Ich würde hier gern eine Schleife reinpacken die das solange checkt bis es initialisiert ist, aber so eine Art Threadingemulation gibt es in Flash sicherlich nicht. Oder doch?

Code:
	addListener(this.movie.obju.mc.clip.container);

function addListener(object)
{
	object.onEnterFrame=function(){
		trace(object._totalframes+"/"+object._framesloaded);
		trace(object._width);
	}
}

In diesem Zusammenhang stellt sich mir die Frage ob man einem Film per AS Frames hinzufügen kann.
 
Zuletzt bearbeitet von einem Moderator:
Es ist schlichtweg und ergreifend Fakt, dass man die Parameter eines soeben geladenen "was auch immer" nicht unmittelbar abfragen kann, da Sie erst wieder initialisiert werden müssen, der Code jedoch schneller in der Ausführung ist. I

Stimmt, und deswegen gibt es onData (hm das hab cih auch grad erst irgendwo erklärt...

du lädst das ganze in nen leeren MC...

PHP:
meinMc.loadMovie("blubb.jpg");

meinMc.onData = function() {
 // Hier die Höhe ermitteln
}

Das ClipEvent "Data" wird immer dann aufgerufen, wenn ein MC Daten (meist Bilder der sowas) bekommt...

Gruß
.
 
Hi.

Ich habe "onData" bisher im Zusammenhang mit PHP genutzt. (wofür es auch äußerst komfortabel ist)
Hierbei klappt es komischerweise nicht, bzw. der Listener springt garnicht erst an.

Hier der Code:

PHP:
	addListener(this.movie.obju.mc.clip.container);
	this.movie.obju.mc.clip.container.loadMovie(mc);

function addListener(object)
{
	object.onData=function(){
		
		trace(object._width);
	}
}

Im Übrigen scheint "onEnterFrame" überhaupt das Einzige zu sein, dass anspringt.

*verzweifel
 
Ok ich sehe es ein das bedarf einer Erklärung:

Es handelt sich um die Seite auf einem Würfel der sich im 3-Dimensionalen Raum dreht.
Diese Seite ist mit verschiedenen Komponenten besetzbar. Damit die Drehung dieser Seite(des Films), erst möglich ist, bedarf es einer Menge trickreicher Skallierungen und Drehungen um perspektivisches Scheeren zu ermöglichen.

Dazu benötige ich diverse Leerfilme wie man an diesem langen Pfad erkennen kann.

Aber vom Prinzip her sollte das ja trotzdem . Es sollte doch eigentlich egal sen in welcher Instanzebene ich das tue. Gelle?
 
Klar ist das egal, nur nicht sonderlich ratsam. Zum Code:

wenn man loadMovie macht wird auch der onData-Code des MCs gelöscht. Deswegen war die Reihenfolge der Aufrufe von mir oben schno richtig (und deine eben falsch...).
 
Auf jeden Fall ersteinmal vielen Dank für die bisherige Hilfe!
Aber: Ich hatte es nur aus Verzweiflung temporär ausgetauscht.
Mit der anderen Reihenfolge hab ich ja begonnen
Ich habe es mit sämtlichen Instanzebenen des Pfades in sämtlichen Reihenfolgen versucht. Aber er springt nicht an.

Hier nochmal wie es bei mir ausschaut:

PHP:
//------------------------------------------
//class page
//------------------------------------------
page = function(fill,line,destination,name,deep,mc,xscale,yscale){	
	this.fill=fill;	
	this.line=line;
	this.movie=destination.createEmptyMovieClip(name,deep);

	this.movie.createEmptyMovieClip("objo",1);
	this.movie.objo.createEmptyMovieClip("mc",1);
	this.movie.objo.mc.createEmptyMovieClip("clip",1);
	this.movie.objo.mc.clip.createEmptyMovieClip("container",1);
	this.movie.objo.mc.clip.container.loadMovie(mc);

	this.movie.objo.mc.clip.container._xscale=xscale;
	this.movie.objo.mc.clip.container._yscale=yscale;

	this.movie.createEmptyMovieClip("obju",2);
	this.movie.obju.createEmptyMovieClip("mc",1);
	this.movie.obju.mc.createEmptyMovieClip("clip",1);
	this.movie.obju.mc.clip.createEmptyMovieClip("container",1);	 
	this.movie.obju.mc.clip.container.loadMovie(mc);
	addListener(this.movie.obju.mc.clip.container);


	
	//this.movie.obju.mc.clip.container._xscale=;
	//this.movie.obju.mc.clip.container._yscale=yscale;	
}

function addListener(object)
{
	object.onData =function(){
		
		trace(object._width);
	}

}

Object.registerClass("page",page);
//------------------------------------------

wie gut das es php-Tags gibt. wusste ich bisher garnet. ^^
 
Zuletzt bearbeitet von einem Moderator:
*hust*
...
peinlich peinlich...

Also du musst das da oben vergessen und diesen Code:

Code:
onClipEvent(data) {
// Hier die Höhe ermitteln
trace("FOOBAR");
}

Direkt auf den MC legen. Dann kannst du per meinMC.loadMpvie("blubb.jpg"); einladen und es kommt nen FOOBAR raus...

Sachen gibts.

Gruß
.
 

Neue Beiträge

Zurück