Ich versteh die welt nich mehr

mama-karl

Mitglied
Hallo, ich versteh die Welt nich mehr.
Ich erspar euch allerdings die Detailles und komm zum Relevanten.

Code:
this.createEmptyMovieClip ("bt01_mc", 21); 
this.createEmptyMovieClip ("bt02_mc", 22); 
loadMovie("01.swf", bt01_mc); 
loadMovie("02.swf", bt02_mc); 

bt01_mc._width = Stage.width; 
bt01_mc._height = Stage.height; 

bt02_mc._width = 20; 
bt02_mc._height = 20; 

bt02_mc.onPress = function() { 
    trace("gedrückt"); 
    this.startDrag(); 
    } 
bt02_mc.onRelease = function(){ 
    this.stopDrag(); 
    }

Das hier bringt mich zur Verzweiflung. Es ist ganz einfach. Der Hauptclip lädt mit obigem AS zwei andere kleine Clips in denen jeweils nur ein Bild drinsteckt. Der zweite Clip soll dragbar sein. Das ist alles.

Ich hab nen Tip bekommen mit loadInit usw. aber da doktor ich auch scho den ganzen Nachmittag rum und komm auf keinen grünen Zweig. Geschweige denn, dass ich das Problem nicht versteh.

Versteht Ihr das?
 
Hi,

das Problem ist einfach dieses:
  1. Erstellst Du zwei leere MovieClips und startest zwei loadMovie-Aktionen

  2. Skalierst Du diese Clips und weist ihnen Mausereignisse zu

  3. Passiert (etwas später) folgendes: Sobald die beiden externen Dateien komplett geladen sind, überschreiben sie die erstellten Clips - und damit sowohl Deine Skalierung als auch Deine Mausereigisse (die im Prinzip Member Deiner Clips sind).

Du musst entweder darauf warten, bis die Clips komplett geladen sind (per herkömmlichem Preloader oder aber mit der MovieClipLoader-Klasse, wo dann die Methode "onLoadInit" ins Spiel käme) - oder Du erstellst in den beiden neuen Clips _weitere_ MovieClips, die als Container die eigentlichen Daten aufnehmen:
Code:
var bt01_mc = this.createEmptyMovieClip ("bt01_mc", 21); 
var bt02_mc = this.createEmptyMovieClip ("bt02_mc", 22);

var ct1 = var bt01_mc.createEmptyMovieClip("ct", 1); // innere Container
var ct2 = var bt02_mc.createEmptyMovieClip("ct", 1);

ct1.loadMovie("01.swf"); 
ct2.loadMovie("02.swf"); 

bt02_mc.onPress = function() { 
    trace("gedrückt"); 
    this.startDrag(); 
} 
bt02_mc.onRelease = function(){ 
    this.stopDrag(); 
}

Die Skalierungen musst Du allerdings tatsächlich erst dann vornehmen, wenn die Dateien komplett geladen sind, da Flash vorher keinen Anhaltspunkt über die spätere Originalgröße hat. Such dazu hier im Forum nach "Preloader" und Du findest eine Menge Vorgehensweisen.

Gruß
.
 
Ok, das hatte ich auch versucht, mich allerdings gewundert, dass immer noch nichts passierte, aber das erwähnteste Du ja grad, dass ich das Fertigladen mit nem preloader trigger und danach die externen filme reinlad.

Hast du ne Idee wie ich das mit loadInit mach? Hab in den Foren schon nach Preloadern gesucht, allerdings hat da keiner eine platzsparende Variante drin, die mit loadInit läuft…
Bitte? Danke!
 
Hi,

wenn Du mit einem MovieClipLoader arbeiten willst, wäre das ungefähr so etwas:
Code:
var container1 = this.createEmptyMovieClip("container1", 101);
var container2 = this.createEmptyMovieClip("container2", 102);

var mcl = new MovieClipLoader();

mcl.onLoadInit = function(tgt) { // wenn ein Clip geladen wurde
	switch(tgt) { // welcher ist es denn?
		case container1: // ist es der erste:
			tgt._width = Stage.width;
			tgt._height = Stage.height;
			break;
		case container2: // oder ist es der zweite:
			tgt._width = 20
			tgt._height = 20;
			tgt.onPress = function() {
				this.startDrag();
			}
			tgt.onRelease = tgt.onReleaseOutside = function() {
				this.stopDrag();
			}
			break;
	}
}

mcl.loadClip("film1.swf", container1);
mcl.loadClip("film2.swf", container2);

Gruß
.
 
Zurück