Film einladen - Objektaktionen

Adam Wille

Erfahrenes Mitglied
Hoi :)

Bei 'nem "Projekt" von mir ist mir kürzlich aufgefallen, dass irgendwie ein komisches Verhalten von indirekten Objektaktionen (sprich: auf der Zeitleiste liegenden Aktionen für Objekte) auftritt.

Situation war:

Film existiert mit container-MC, in diesen MC wird nun ein Film hineingeladen.
Bestimme ich nun die Objektaktion für den container-MC wie folgt:
PHP:
container.onEnterFrame = function () {
	_root.geladen = this.getBytesLoaded();
	_root.total = this.getBytesTotal();
	trace(_root.total);
	trace(_root.geladen);
}
werden mir für die beiden Werte jeweils nur die Größe des MCs ausgegeben. (4 Byte)
Obwohl es ein enterFrame-Event ist, wird das ganze nur einmal ausgeführt...

:confused:

Nehme ich dahingegen einen zweiten controller-MC in den Film auf und gebe diesem die indirekte Objektaktion so hier:
PHP:
controller.onEnterFrame = function () {
	_root.geladen = _root.container.getBytesLoaded();
	_root.total = _root.container.getBytesTotal();
	trace(_root.total);
	trace(_root.geladen);	
}
werden mir die Werte ordnungsgemäß ausgegeben.

Jemand 'ne Idee, woran das liegen könnte?
Eingeladener Film annuliert Objektaktion?!

Geist
 
:confused:

Skyla, du verwirrst mich...
PHP:
_root.test = "_root-Variable wird ausgegeben";
mc.test = "MC-Variable wird ausgegeben";

mc.onMouseMove = function () {
	trace(this.test);
}
Setz' das mal in einen leeren Film mit einem MC...

Geist
 
hi ghost

meine erste antwort war so'n schuss aus der hüfte und natürlich quatsch. hätt ich mir ja denken können, dass es n'ecke komplizierter ist.

Ich hab's mehrmals hin und hergetestet. Es muss aber irgenwas mit dem ladeinterval zu tuen haben. Etwas abenteuerlich ist diese überlegung: beim ersten onEnterFrame ist der film noch nicht geladen. deshalb die 4 beim zweiten findet er nicht mehr den gleichen mc vor, da dieser ersetzt wurde durch...ist sicher falsch.

in macromedia mx e learning steht folgende behauptung:
Because loaded movies dont't have instance names, there is no way to tell Flash to check for it's load status.

er hat dann mit eine variable gesetzt, die bei jedem load/unload auf true/false gesetzt wurde und hat so abgecheckt, ob der film geladen ist oder nicht und eben nicht über getBytesloaded. Vieleicht hat er auch nur nicht Deine zweite (funktioierende) Variante gekannt.:)

Schreib, wenn Du mehr weisst !

c u
 
Jo, nette Überlegung - von wem auch immer sie stammt.

Hab jetzt grad mal weiter überlegt und bin dabei auf folgendes Script
gekommen - hab mir gedacht: "Wenn das nicht läuft, dann ist was faul".
PHP:
container.onEnterFrame = function () {
	count++;
	if (count == 15) {
		loadMovie("film.swf", container);
	}
	trace(count);
}
Und da ist was faul. ;)

Soll heißen - der Trace-Counter hört Punkt bei 15 auf.
Sprich: Da muss also tatsächlich irgendwie was mit dem container-MC geschehen.

Mysteriös...

Also Skyla klingt schon wie Scully, dann bin ich ab sofort Mulder
und dann geht's ab auf böse-Objektaktionen-Jagd. :)

Evtl. sonst noch jemand Gedanken hierzu? :)

Geist
 
Hi Geist

hab gesehen, dass du wieder so ne as-knacknuss zum besten gegebenhast (freu!). Deshalb hier noch schnell die lösung zu diesem:

der grund wieso der enterFrame abgebrochen wird liegt darin, dass frame 1 (hier hast du nämlich dein erstes script reingeschrieben, stimmts? ) zwar aufgebaut wird und deshalb das erste onEnterFrame auch ausgeführt wird, dann aber wegen dem loadMovie-Befehl überschrieben wird.

das passiert dir mit allen getBytesLoaded, play, _x,_y,_visible etc. die du im ersten frame mit einem loadMovie zusammenschreibst.

hab nen megacoolen MovieClip.prototype um das problem zu umgehen und um nicht mehrere 'waiting-frames' zu verwenden. denke aber nicht, dass das hier jemand interessiert.

c u -skyla ;)
 
damn-da schlummert dein post tagelang unberührt in den tiefen des boards und dann holen wir ihn in der gleichen minute wieder rauf...jetzt wird's wirklich langsam mysteriös...:eek:

was soll das heissen: von wem auch immer sie stammt ? Von mir natürlich! Traust mir soviel Phantasie wohl gar nicht zu,hm? Frechheit!:)

na warte! der inhalt des letzten post's stammt aber nicht von mir -ich weiss, dass das klar ist, danke- sondern von Grandmasta bokel persönlich. ist dir ja ein begriff.

skyla :)

PHP:
skyla == scully  //langsam treibst du's zu bunt mein lieber
 
Wieso wird Frame 1 überschrieben?

Soll das heißen, wenn ich im Film in Frame 1 'nen loadMovie()-Befehl setze, die nachfolgenden Anweisungen des Frames ignoriert werden? :eek:

Kann doch nicht sein...

Aber schieb' den prototype doch mal rüber - du weißt doch, dass inzwischen Grünes Licht gegeben wurde und in dem Falle kann's also nur dem Wohl aller entsprechen. :)

Interessiert mich jetzt sowieso echt mal, wie sowas ausschaut...

Grandmaster bokel kenn' ich nur vom Lesen her ausm flashforum, ich besuch' kaum Newsseiten, Portalseiten und so - aber das wird sich hoffentlich ja bald ändern. :)

Geist

P.S.: Weißt du, wann ich es zu weit getrieben hätte? ;)
PHP:
skyla === scully  //Feinheiten sind dazu da, um beachtet zu werden!
 
scheint aber so zu sein. Darum hab ich dir ja gesagt, dass ich solche thread's so cool find. da musst du dir nämlich mal klar werden wie flash wirklich denkt und funktioniert. und glaub mir: da muss ich erst geholfen werden.

den prototypen kann ich dir leider nicht geben. er ist zu gut.

kleiner scherz:

PHP:
Movieclip.prototype.loadMovieWithOnLoad = function(url, onLoad, onLoadParms, method){
        
        
        var mc = this.createEmptyMovieclip("looper", 1040000-1);
        mc.exec = onLoad;
        mc.execParms = onLoadParms;
        mc.onEnterFrame = function(){
                this._parent.updateStatus(this._parent.holder);
                with (this._parent.holder) {
                        if (_width > 0 && _height > 0) {
                                _alpha = 100;
                                this.exec.apply(this._parent.holder, this.execParms);
                                this.removeMovieClip();
                        }
                }
        };
        mc = this.createEmptyMovieclip("holder", 1040000-2);
        mc.loadMovie(url, method);
        mc._alpha = 0;
}



//methode wg. for in loops verstecken
ASSetPropFlags(Movieclip.prototype, ["loadMovieWithOnLoad"], 1);



function mcSetSize( w, h) {
        this._width = w;
        this._height = h;
}
mybild.loadMovieWithOnLoad("deinFilm.swf", mcSetSize, [300, 300]);

sag wenigstens mal danke.

das ding hat leider einen kleinen nachteil: du kriegst mega trouble wenn der filminhalt über die bühnenmasse hinausgeht (der geneigt leser versteht meinen frust...)




;)
 

Neue Beiträge

Zurück