for schleife + rollOver

Gerri84

Mitglied
ich habe mir ein dynamisches menü gebaut jetzt hab ich 2 probleme nach demm ich die hauptmenüpunkte mit einer schleife generieren lasse funktionieren meine rollover effekte nicht mher... an was kann das liegen !?

PHP:
for(j=0;j<=(menue_txt.length-1);j++) 
{
	
	attachMovie("menuebox_mc", ["menuebox_mc"+j], 10+j);
	
	_root.menuebox_mc1.useHandCursor = false;
	_root.menuebox_mc4.useHandCursor = false;
	
	 _root["menuebox_mc"+j]._x = (160*j)-70;
  	 _root["menuebox_mc"+j]._y = hoehe-160; 
 	 _root["menuebox_mc"+j].gotoAndStop(1);
	 
	 
	 attachMovie("menue_link_mc", ["menue_link_mc"+j], 20+j);
	
	 _root["menue_link_mc"+j]._x = ((160*j)+29)-160;
  	 _root["menue_link_mc"+j]._y = hoehe-155; 
	 
	 
	 _root["menuebox_mc"+j].mainmenue_txt.text = menue_txt[j];
	 
	 _root["menuebox_mc"+j].box_over._visible = true;
	 _root["menuebox_mc"+j].box_down._visible = false;
	 			 
	 
	 
	 _root["menuebox_mc"+j].onRollOver = function() 
		{
			 _root["bewegen_menuebox"+j]((160*j)-70, hoehe-170, 3); 
			 _root["menuebox_mc"+j].box_over._visible = false;
			 _root["menuebox_mc"+j].box_down._visible = true;
		}
	

	_root["menuebox_mc"+j].onRollOut = function() 
		{
			 _root["bewegen_menuebox"+j]((160*j)-70, hoehe-160, 3); 
			 _root["menuebox_mc"+j].box_over._visible = true;
			 _root["menuebox_mc"+j].box_down._visible = false;
		}


deweiteren habe ich eine funktion um die menüpunkte zu bewegen.... diese möchte ich auch in die schleife mit einbauen... dieses habe ich auch versucht... bekomme keine fehler meldung... aber die funktion bleibt aus .... TOLL

PHP:
MovieClip.prototype.bewegen_menuebox1 = function(x, y, speed) {
	
	var mc = this;
	
	menuebox_mc1.onEnterFrame = function() {
		var position_box = position_box_x=position_box_y=true;
		
		if (Math.abs(menuebox_mc1._x-x)>1) {
			menuebox_mc1._x += (x-menuebox_mc1._x)/speed;
			position_box = false;
		}
		if (Math.abs(menuebox_mc1._y-y)>1) {
			menuebox_mc1._y += (y-menuebox_mc1._y)/speed;
			position_box = false;
		}
		if (position_box && position_box_x && position_box_y) {
			menuebox_mc1._x = x;
			menuebox_mc1._y = y;
			delete (this.onEnterFrame);
		}
	};
};


wenn mir jemand einen denk anstoss verpassen könne wäre echt nett...
 
Hi,

1. die Variable "j" ist zum Zeitpunkt Deiner Mausereignisse nicht mehr auktuell (bzw. zeigt auf den letzten Wert in der Schleife).

Es müsste eher so aussehen:
Code:
 _root["menuebox_mc"+j].onRollOver = function() 
        {
             this.box_over._visible = false;

2. Du hast eine Prototy-Methode mit dem Namen "bewegen_menuebox1". Der Zielclip eines Prototypes wird aber nicht durch den Funktionsnamen übergeben, sondern durch das aufrufende Objekt. Statt
Code:
_root["bewegen_menuebox"+j]
wird die Funktion für jeden Clip so aufgerufen:
Code:
 _root["menuebox_mc"+j].bewegen()
Der Prototyp muss also so lauten:
Code:
MovieClip.prototype.bewegen = function(x, y, speed) {
und der Code in der rollOver-Aktion so:
Code:
 _root["menuebox_mc"+j].onRollOver = function() 
        {
             this.bewegen( ... );
             this.box_over._visible = false;
Da Du die Variable "j" nicht in den Mausereignissen verwenden kannst, solltest Du jedem MC seinen Index als eigenes Member mitgeben:
Code:
_root["menuebox_mc"+j].idx = j;

Gruß
.
 
Hi,

nein, das machst Du einmal direkt nach dem Instanzieren (attachMovie) des Clips.

In dem Mausereignis kannst Du dann auf diesen Index zugreifen:
Code:
_root["menuebox_mc"+j].onRollOver = function() 
        {
             this.bewegen((160 * this.idx)  -70, hoehe - 170, 3);
             this.box_over._visible = false;

Gruß
.
 
ok ok... vielleicht hab ich da was falsch verstanden; zumindest t es nicht...
ich muss vielleicht dazusagen ich habe diese bewegung für mehrere elemente

PHP:
MovieClip.prototype.bewegen_content = function(x, y, speed) {
	
	var mc = this;
	
	content_mc.onEnterFrame = function() {
		var position_content = position_content_x=position_content_y=true;
		
		if (Math.abs(content_mc._x-x)>1) {
			content_mc._x += (x-content_mc._x)/speed;
			position_content = false;
		}
		if (Math.abs(content_mc._y-y)>1) {
			content_mc._y += (y-content_mc._y)/speed;
			position_content = false;
		}
		if (position_content && position_content_x && position_content_y) {
			content_mc._x = x;
			content_mc._y = y;
			delete (this.onEnterFrame);
		}
	};
};



MovieClip.prototype.bewegen_voegel = function(x, y, speed) {
	
	var mc = this;
	
	voegel_mc.onEnterFrame = function() {
		var position_voegel = position_voegel_x=position_voegel_y=true;
		
		if (Math.abs(voegel_mc._x-x)>1) {
			voegel_mc._x += (x-voegel_mc._x)/speed;
			position_voegel = false;
		}
		if (Math.abs(voegel_mc._y-y)>1) {
			voegel_mc._y += (y-voegel_mc._y)/speed;
			position_voegel = false;
		}
		if (position_voegel && position_voegel_x && position_voegel_y) {
			voegel_mc._x = x;
			voegel_mc._y = y;
			delete (this.onEnterFrame);
		}
	};
};


den wenn ich das jetzt aufrufe... verschiebt er mir alle elemente...

PHP:
for(j=0;j<=(menue_txt.length-1);j++) 
{
		
	MovieClip.prototype.bewegen = function(x, y, speed) {
		
		var mc = this;
		
		["menuebox_mc"+j]onEnterFrame = function() {
			var position_box = position_box_x=position_box_y=true;
			
			if (Math.abs(["menuebox_mc"+j]._x-x)>1) {
				["menuebox_mc"+j]_x += (x-["menuebox_mc"+j]._x)/speed;
				position_box = false;
			}
			if (Math.abs(["menuebox_mc"+j]._y-y)>1) {
				["menuebox_mc"+j]_y += (y-["menuebox_mc"+j]._y)/speed;
				position_box = false;
			}
			if (position_box && position_box_x && position_box_y) {
				["menuebox_mc"+j]_x = x;
				["menuebox_mc"+j]_y = y;
				delete (this.onEnterFrame);
			}
		};
	};		

	
	
	
	
	attachMovie("menuebox_mc", ["menuebox_mc"+j], 10+j);
	
	_root["menuebox_mc"+j].idx = j;
	
	_root.menuebox_mc1.useHandCursor = false;
	_root.menuebox_mc4.useHandCursor = false;
	
	 _root["menuebox_mc"+j]._x = (160*j)-70;
  	 _root["menuebox_mc"+j]._y = hoehe-160; 
 	 _root["menuebox_mc"+j].gotoAndStop(1);
	 
	 
	 attachMovie("menue_link_mc", ["menue_link_mc"+j], 20+j);
	
	 _root["menue_link_mc"+j]._x = ((160*j)+29)-160;
  	 _root["menue_link_mc"+j]._y = hoehe-155; 
	 
	 
	 _root["menuebox_mc"+j].mainmenue_txt.text = menue_txt[j];
	 
	 _root["menuebox_mc"+j].box_over._visible = true;
	 _root["menuebox_mc"+j].box_down._visible = false;
	 			 

				 
				 
	 
	 _root["menuebox_mc"+j].onRollOver = function(j)
		{
			 //this.bewegen((160 * this.idx)-70, hoehe-170, 3); 
			 this.menuebox_mc.box_over._visible = false;
			 this.menuebox_mc.box_down._visible = true;
		}
	

	_root["menuebox_mc"+j].onRollOut = function() 
		{
			 //this.bewegen((160 * this.idx)-70, hoehe-160, 3); 
			 this.box_over._visible = true;
			 this.box_down._visible = false;
		}

und die führt er auch nicht aus

this.box_over._visible = true;
this.box_down._visible = false;
 
ok dieses Problem hab ich gelöst (tippfehler)

PHP:
this.box_over._visible = true;
this.box_down._visible = false;

und danke schon mal für die prompte hilfe...
 
Hi,

in dem Code ist einiges im Argen (so gehört der Prototype nicht in die Schleife, und die eckigen Klammern sind auch an einigen Stellen falsch gesetzt).

Bitte poste Deine Quelldatei (fla), damit ich mir ein Bild von der gewünschten Arbeitsweise machen kann.

Gruß
.
 
Hi,

ich muss die Datei testen können - dazu brauche ich die Objekte in der Bibliothek, und alles, was sich auf der Bühne befindet.

Lade die Datei doch bei einem Sharehoster hoch und poste hier den Link. ;)

Gruß
.
 

Neue Beiträge

Zurück