MovieClip.onRelease = function() in for-Schleife

Marius Heil

Erfahrenes Mitglied
Hi,

wie kann ich in einer For Schleife, in der ich mehrere Leere MCs generiere diesen auch gleich eine onRelease Aktion verpassen?
Als ich das das letzte mal versucht hatte, gabs nur Probleme.


Marius
 
Hi,

so?
Code:
for (var i=0; i<10; i++) {
    var clip = this.createEmptyMovieClip("button" + i, i);
    clip._x = i * 20; // nebeneinander anordnen ...
    clip.onRelease = function() {
         trace("angeklickt:" + this);
    }
}
"Leere" MovieClips reagieren natürlich erstmal nicht auf Mausereignisse, da sie keine Ausdehnung haben. Du musst schon etwas hineinzeichnen oder -laden.

Gruß
.
 
Mhhh, hat nicht wirklich was gebracht, das was ich bisher geschreibselt hab sieht so aus:
HTML:
function erzeuge_tumbs(){
	//Zeile
	zaehler = 0;
	for (i=0; i<Math.round((image_xml.web.anzahl.getValue()%5)+1); i++){
		trace("zeile");
		//Spalte
		for (j=0; j<5; j++){
			if (zaehler >= image_xml.web.anzahl.getValue()){ break; }
			trace("spalte");
			//Leere MCs generieren und die Bilder reinladen
			clip = vorschau.createEmptyMovieClip("tumb"+i+"_"+j, zaehler);
			vorschau["tumb"+i+"_"+j]._x = (j+1)*40-40;
			vorschau["tumb"+i+"_"+j]._y = (i+1)*40-40;
			loadMovie("http://localhost/g/"+image_xml.web.image[zaehler].tumb.getValue(), _root.vorschau["tumb"+i+"_"+j]);
			//On Release Aktionen verpassen
			clip.onRelease = function(){
				trace(23);
				
			}
			
			
			zaehler++;
		}
		if (zaehler >= image_xml.web.anzahl.getValue()){ break; }
	}
	
}
Man erkennt vielleicht, dass das ganze zum Schluss mal ne Bildergalaerie werden soll ;)


Marius
 
Hi,

hat sich erledigt, hab rausgefunden, dass die onReleasefunktion beim laden überschreiben wird, andere haben da nen extra preloader gebaut, das war mir allerdings zu blöd, deshalb hab ich einfach ein schwarzes Viereck in nen MC gepackt und dann noch gleichzeitig nen anderen MC erzeugt, dem ich die onReleasefunktion zugewiesen hab.
Code:
			vorschau.attachMovie("clicker", "clicker"+i+"_"+j, vorschau.getNextHighestDepth());
			vorschau["clicker"+i+"_"+j]._x = (j+1)*40-40;
			vorschau["clicker"+i+"_"+j]._y = (i+1)*40-40;
			vorschau.createEmptyMovieClip("tumb"+i+"_"+j, vorschau.getNextHighestDepth());
			vorschau["tumb"+i+"_"+j]._x = (j+1)*40-40;
			vorschau["tumb"+i+"_"+j]._y = (i+1)*40-40;
			loadMovie("http://localhost/g/"+image_xml.web.image[zaehler].tumb.getValue(), _root.vorschau["tumb"+i+"_"+j]);

Fand das einfacher ;)


Vielen Dank aber.


Marius
 
Also jetzt steh ich gewaltig auf dem Schlauch :D
Also das ganze funktioniert nun zwar, aber der Witz ist, tumbnail 2 macht irgendwie ne Ausnahme, warum in aller Welt auch^^
Ich hab das ganze mal hochgeladen, vielleicht weiß jemand, woran das liegen könnte.


Marius
----
Ihr solltet bei Gelegenheit mal .rar Dateien zulassen,....
 

Anhänge

Hi,

der Fehler erschließt sich mir nicht wirklich. Abgesehen davon, dass ab dem dritten Bild in der xml-Datei alle Bilder "testi" heissen, die natürlich nicht zur Verfügung stehen und ich den Sinn dieses erweiterten xml-Prototypes nicht ganz durchschaue, funktioniert im Test eigentlich alles so, wie es soll.

Gruß
.
 
Hi,
das ganze XML geschreibsel ist natürlich überdimensioniert^^
Ich wollte die Einsortierung in ein Array nicht selber schreiben.
Oben hatte ich noch Modulo benutzt, in der Ansicht, das gibt mit ne getiltrechnung ohne Kommazahlen zurück, ganz verwechselt, das gibt ja den Rest zurück.
Dass die Bilder anderst heißen ist grad egal, das stört nicht, der Witz ist, das 2. tumbnail in der ersten Reihe, der mauszeiger wandelt sich in eine Hand um, soweit geht alles, aber mach mal ne traceaktion auf alle tumbnails drauf, es gehen alle, außer dem 2.,....
Keine Idee, was das sein könnte.


Marius
 
Hi,

ich habe nun noch mal etwas gründlicher drübergeschaut.

Du machst es Dir an einigen Stellen unnötig kompliziert: Statt Zeile und Spalte in die Instanznamen aufzunehmen, kannst Du die Dinger einfach fortlaufend benennen und nur die Positionierung anhand des Index vornehmen:
Code:
var cols = 4;
var x = 0;
var y = 0;
for (var i=0; i<anzahl; i++) {
    var clip = this.createEmptyMovieClip("foo" + i, i); // <<- spart getNextHighestDepth etc.
    clip._x = x * breite + 20;
    clip._y = y * hoehe + 20;
    x ++; // Spalte weiter ...
    if (x >= cols) { // wenn am Zeilenende:
        x = 0;
        y ++; // ... neue Zeile
    }
}
Statt für jeden Thumbnail einen Bildcontainer und einen "Klicker" zu instanzeren, würde ich den Bildcontainer im Thumbnail anlegen - dann sparst Du Dir die Hälfte der Positionierungen und kannst das Mausereignis direkt auf den Thumbnail legen:
Code:
// irgendwo in obiger Schleife:
    var thumb = this.createEmptyMovieClip("thumb" + i, i);
    var img = thumb.createEmptyMovieClip("img", 1); // fürs Bild;
    thumb.path = "bilder/bild" + i + ".jpg"; Pfad zum großen Bild im Thumb ablegen
    img.loadMovie("bilder/thumb" + i + ".jpg"); // bei Dir halt aus der xml-Datei
    thumb.onRelease = function() {
        trace(this.path); // <<- hier wird nix durch loadMovie überschrieben!
    }

Der Fehler in Deiner Datei tritt nicht mehr auf, wenn Du zuerst die Bildcontainer und dann die Klicker instanzierst - irgendwie scheint Thumbnail2 den Klicker2 zu verdecken - frag mich im Moment bitte nicht, wieso. ^^

Gruß
.
 
Hey, danke, komm allerdings wohl erst nach dem Urlaub zum testen, bin 10 tage weg. Vielen Dank für die Hilfe, bald hast 8000 Beiträge^^
Würde mich interessieren, an was der Fehler liegt, der scheint mir irgendwie suspekt^^


Marius
 
Zurück