Parameter eines geladenen Films ermitteln

Denn das "onEnterFrame" tritt ja nur einmal auf
Stimmt nicht: onEnterFrame wird periodisch mit der eingestellen Framerate aufgerufen, egal ob der Film nur einen Frame hat. Ich muss täglich auf irgendwelche Ereignisse per onEnerFrame warten - sei es für Preloader, oder zum Feststellen von Bildmaßen (Galerien) - klappt immer bestens. ;) Probier mal:
PHP:
this.onEnterFrame = function() {
   trace("... und noch ein Frame!");
}
Bei einem Film mit nur einem Frame.

Gruß
.
 
Hi!

PHP:
	this.movie.obju.mc.clip.container.loadMovie(mc);		
	this.movie.obju.mc.clip.container.play();
	this.movie.obju.mc.clip.container.onEnterFrame = function() 
	{ 
   		trace("... und noch ein Frame!"); 
	}

Klappt bei mir nicht. Es gibt nur einen Trace. Ich habe es jetzt zum 9.... mal ausprobiert.

Ich habe es jetzt wie folgt gelöst:

PHP:
//------------------------------------------
//class page
//------------------------------------------
page = function(fill,line,destination,name,deep,mc,cube){	
	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.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);		

	waitForInit(this.movie.objo.mc.clip.container,this.movie.obju.mc.clip.container,cube);
	
}

function waitForInit(object1,object2,cube)
{
	function callback() { 
		if(object2._width>0)
		{
			clearInterval(intervalID);		 
			matchPerspective(object1,object2,cube);
		}
	}
	var intervalID; 
	intervalID = setInterval(callback,33,object1,object2,cube);
}

function matchPerspective(obj1,obj2,cube) 
{ 
	
	for (var i in obj1) 
	{	
		if(typeof(obj1[i])=="movieclip"&&obj1[i]._name=="spacer")
		{
			obj1._xscale=cube.border/obj1[i]._width*100;
			obj1._yscale=cube.border/obj1[i]._height*100;
			obj2._xscale=cube.border/obj1[i]._width*100;
			obj2._yscale=cube.border/obj1[i]._height*100;
		}
		
		if (typeof(obj1[i].text)=="string"&&typeof(obj1[i])=="object"&&obj1[i]._name!=null)
		{
				obj1[i].onScroller=function()
				{
   					obj2[i].scroll=obj1[i].scroll;
				}
				obj2[i].onScroller=function()
				{
   					obj1[i].scroll=obj2[i].scroll;
				}
		}
    		if (typeof(obj1[i]) == "movieclip") 
		{ 
			matchPerspective(obj1[i],obj2[i],cube); 
		}
	} 
} 

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

Kurz: Ich habe mit "Intervall" meinen "Thread" erzeugt.

MfG

Matthias Nordwig
 
Zuletzt bearbeitet von einem Moderator:
Klar,
PHP:
 this.movie.obju.mc.clip.container.loadMovie(mc);        
    this.movie.obju.mc.clip.container.play();
    this.movie.obju.mc.clip.container.onEnterFrame = function()
    {
           trace("... und noch ein Frame!");
    }
kann auch nicht gehen, da durch die loadMovie-Aktion die onEnterFrame-Methode von dem neuen Film überschrieben wird. Führe die onEnterFrame-Methode auf einem anderen MC aus (z.B. einem temporären, den Du mit createEmptyMovieClip erstellst, oder auf "this.movie.obju.mc.clip").

Wie dem auch sei: Mit einem Intervall geht es natürlich auch, und wenn das so läuft, ist es prima. :)

Gruß
.
 
Ups stimmt. ^^

Das hatte ich dann gesucht. Vielen Dank!
Ich frage mich allerdings wie das funktioniert.
Und wieso die Methode dann überschrieben wird.

MfG

Matthias Nordwig
 
Hi,

na ja,

wenn ich einen MovieClip "clipA" habe, in dem ich eine Funktion definiere (z.B. die onEnterFrame-Methode), und dann in diesen Clip eine swf-Datei einlade, wird "clipA" mit der neuen Datei überschrieben (und somit auch alle Methoden und Eigenschaften der Instanz). Ich kann den eingeladenen Clip nach dem Laden direkt mit dem Instanznamen "clipA" ansprechen (verweist in diesem Fall auf _root des neuen Films). - im Gegensatz zu attachMovie, das eine neue Instanz innerhalb des Zielclips anlegt.

Häufiges Beispiel: Galerien, in denen die einzelnen Bilder getrennt vorgeladen und skaliert werden müssen. In der Regel lege ich für jedes Bild einen MovieClip an, der als Container und Träger für Methoden und Eigenschaften dient. In diesen Clips wird dann eine neue leere Instanz mit createEmptyMovieClip erzeugt, in die das Bild dann tatsächlich geladen wird:
PHP:
var bilder = new Array(3);
var pfade = new Array("bild1.jpg", "bild2.jpg", "bild3.jpg");

for (var i=0; i<bilder.length; i++) {
    bilder[i] = this.createEmptyMovieClip("bild" + i, i);
    var ct = bilder[i].createEmptyMovieClip("ct", 1);
    // in ct laden, nicht in bilder[i]:
    ct.loadMovie(pfade[i]);
    // onEnterFrame in bilder[i]:
    bilder[i].onEnterFrame = function() {
        var cur = this.ct.getBytesLoaded();
        var max = this.ct.getBytesTotal();
        if (cur > 10 && max > 10) {
            var percent = cur * 100 / max;
            trace(percent); // Ladebalken anzeigen o.ä.
            if (percent >= 100) {
                // Bild skalieren usw.
                delete this.onEnterFrame;
            }
        }
    }
}

Gruß
.
 

Neue Beiträge

Zurück