Konkretes Rollover Problem mit der Logik

Orphelina

Erfahrenes Mitglied
Hallöchen,

also ich lade Bilder dynamisch aus XML- Files in einem ActionScript in meinen Film. Ich richte die Grösse der Bilder nach einer festen Breite, die Höhe wird automatisch ermittelt und eine Bildunterschrift und weitere Bilder werden dynamisch platziert. Soweit so gut. Nun möchte ich aber einen RollOver-Effekt haben, komme aber mit der Logik nicht ganz hin, da er mir die neue Y-Position nicht in meine RollOver-Funktion mitnimmt.
Kann mir da einer helfen? Ich hab schon überlegt den RollOver und RollOut auszulagern, aber da fehlt mir noch die zündende Idee...
Hier mal der Code:

Hier wird das Bild geladen:
Code:
if(aNode.firstChild.nodeValue!= null){
var imgname = aNode.firstChild.nodeValue;
_root["Bild1"]["img1"].loadMovie("pics/" +imgname);
ImageEnterFrame("Bild1", "img1", total_width, 634, true);

Code:
function ImageEnterFrame(givenLabel, givenImg, total_width, x_pos, with_y_pos){
_root[givenLabel].onEnterFrame = function() {
if (_root[givenLabel][givenImg]._width > 10 && _root[givenLabel][givenImg]._height > 10) {
	var startWidth = _root[givenLabel][givenImg]._width;
	var newWidth = total_width;
	_root[givenLabel][givenImg]._width = newWidth;					
	var verhaeltnis = newWidth / startWidth;					
_root[givenLabel][givenImg]._height = _root[givenLabel][givenImg]._height * verhaeltnis;
	_root[givenLabel][givenImg]._x = x_pos;
	if(with_y_pos){
	_root[givenLabel][givenImg]._y = 220;
	}
	delete this.onEnterFrame;
	}//end if skalieren
			
 //positionieren und MO-Effekte
var nextElement_pos_y = _root["Bild1"]["img1"]._y + _root["Bild1"]["img1"]._height + 10;
_root.Bildunterschrift1._y = nextElement_pos_y;
//MouseOver- Marks setzen und aufrufen
_root["Bild1"]["img1"].onRollOver = function() {
                   trace("Over");
		_root.attachMovie("MO_top", "MO_top", 50);
		_root.MO_top._x = 630;
		_root.MO_top._y = 217;
						
		_root.attachMovie("MO_bottom", "MO_bottom", 53);
		_root.MO_bottom._x = 630;
		_root.MO_bottom._y = nextElement_pos_y - 10 - 3;      
                };
			
_root["Bild1"]["img1"].onRollOut = function() {
		trace("OUT");
        	 removeMovieClip(_root.MO_top);
		 removeMovieClip(_root.MO_bottom);
}//end fuction MouseOut

Aber in de Funktion RollOver kennt er meine Variable nextElement_pos_y nicht mehr... Wieso denn nicht? Wie bekomm ich die Variable übergeben?
Natürlich werden danach noch weitere Bilder platzier und die Variable weiter hochgerechnet, also die wird weiter benutzt und ich will immer den jeweiligen aktuellen Wert auch für meine MovieClips zum platzieren nehmen...

Gruß
 
Hi,

spontan würde ich sagen da du mit var Variablenname eine lokale Variable definiert hast, gibts die in der nächsten Funktion nicht mehr. Nimm mal das "var" weg.
Aber ansonsten hab ich den Code nicht voll durchgelesen, nutze bitte die "PHP-Tags" zum posten des Codes, damit wird es lesbarer.

Gruss Lloyd
 
Ok, ich werde das mit der Variable mal ausprobieren! Sorry für den falschen Code-Tag, mir war nicht klar, dass das so einen grossen Unterschied macht!

Gruß
 
Ok das Problem lag eindeutig an meiner lokalen Variable die in der Funktion nicht mehr bekannt ist. Wenn man den "genaueren" Pfad angibt, stimmt es soweit. Nur die Logik die Flash da veranstaltetn, ist mir persönlich noch unklar.
Ich dachte ich kann dann den Inhalt der Variable genau zum platzieren benutzen, aber spätestens beim 2. Bild stimmt das alles gar nicht mehr...
Ich hab eher das Gefühl wahllos was abzuziehen und dazuzuzählen von anderen Komponente, als die Variable sinnvoll nutzen zu können.
Aber vielleicht blick ichs auch einfach nicht... :-)

PHP:
var nextElement_pos_y ;
//Bildunterschrift1 positionieren
_root["Bild1"]["img1"].nextElement_pos_y = _root["Bild1"]["img1"]._y + _root["Bild1"]["img1"]._height + 10;
_root.Bildunterschrift1._y = _root["Bild1"]["img1"].nextElement_pos_y;
		
//###################################################
//MO-Marks für Bild1 setzen
//###################################################
_root["Bild1"]["img1"].onRollOver = function() {
_root.attachMovie("MO_top", "MO_top", 50);
_root.MO_top._x = 630;
_root.MO_top._y = 217;
				
_root.attachMovie("MO_bottom", "MO_bottom", 51);
_root.MO_bottom._x = 630;
_root.MO_bottom._y = 220 + _root["Bild1"]["img1"]._height - 3;
};
			
_root["Bild1"]["img1"].onRollOut = function() {
 removeMovieClip(_root.MO_top);
 removeMovieClip(_root.MO_bottom);
};//end fuction MouseOut
			
//Bild 2 positionieren
_root["Bild1"]["img1"].nextElement_pos_y += _root.Bildunterschrift1._height - 20;
_root["Bild2"]["img2"]._y = _root["Bild1"]["img1"].nextElement_pos_y;
			
//###################################################
//MO-Marks für Bild2 setzen
//###################################################
_root["Bild2"]["img2"].onRollOver = function() {
_root.attachMovie("MO_top42", "MO_top42", 52);
_root.MO_top42._x = 630;
_root.MO_top42._y = _root["Bild1"]["img1"].nextElement_pos_y - _root["Bild2"]["img2"]._height - _root.Bildunterschrift1._height - _root["Bild2"]["img2"]._height + 13;
				
_root.attachMovie("MO_bottom42", "MO_bottom42", 53);
_root.MO_bottom42._x = 630;
_root.MO_bottom42._y = _root["Bild1"]["img1"].nextElement_pos_y - _root.Bildunterschrift1._height - _root["Bild2"]["img2"]._height - 13;
};//end function
				
_root["Bild2"]["img2"].onRollOut = function() {
removeMovieClip(_root.MO_top42);
removeMovieClip(_root.MO_bottom42);
};//end fuction MouseOut
			
//Bildunterschrift2 positionieren
_root["Bild1"]["img1"].nextElement_pos_y += _root["Bild2"]["img2"]._height + 10;
_root.Bildunterschrift2._y = _root["Bild1"]["img1"].nextElement_pos_y;

Laut meiner Logik dachte ich ich kann einfach die Variable nextElement_pos_y benutzen und den aktuellen Stand nehmen und dann nur etwas abziehen oder dazuzuzählen, jetzt hantier ich mit einigen anderen Elemten rum, da ich den Inhalt der Variable nicht wirklich nachvollziehen kann....

Nun ja...

Ach jetzt seh ich den Vorteil von dem PHP- Code- Tag... alles klar!
 
Ok mein neuer Versuch war, eine neue Variable einzuführen, in der ich meine andere dann abspeicher. Somit ist die Rechnung jetzt zwar kleiner, was toll ist, aber bei Bild2 und Bild3 macht er den MouseOver bei Bild3- muss man das verstehen?

PHP:
//positionieren und MO-Effekte
var nextElement_pos_y ;
//Bildunterschrift1 positionieren
_root["Bild1"]["img1"].nextElement_pos_y = _root["Bild1"]["img1"]._y + _root["Bild1"]["img1"]._height + 10;
_root.Bildunterschrift1._y = _root["Bild1"]["img1"].nextElement_pos_y;
			
//MouseOver- Marks setzen und aufrufen
//###################################################
//MO-Marks für Bild1 setzen
//###################################################
_root["Bild1"]["img1"].onRollOver = function() {
_root.attachMovie("MO_top", "MO_top", 50);
_root.MO_top._x = 630;
_root.MO_top._y = 217;
					
_root.attachMovie("MO_bottom", "MO_bottom", 51);
_root.MO_bottom._x = 630;
_root.MO_bottom._y = 220 + _root["Bild1"]["img1"]._height - 3;
};
			
_root["Bild1"]["img1"].onRollOut = function() {
 removeMovieClip(_root.MO_top);
 removeMovieClip(_root.MO_bottom);
};//end fuction MouseOut
			
//Bild 2 positionieren
_root["Bild1"]["img1"].nextElement_pos_y += _root.Bildunterschrift1._height - 20; //+ 20;
_root["Bild2"]["img2"]._y = _root["Bild1"]["img1"].nextElement_pos_y;

var my_nextYpos = _root["Bild1"]["img1"].nextElement_pos_y;
			
//###################################################
//MO-Marks für Bild2 setzen
//###################################################
_root["Bild2"]["img2"].onRollOver = function() {
_root.attachMovie("MO_top42", "MO_top42", 52);
_root.MO_top42._x = 630;
_root.MO_top42._y = my_nextYpos - 3;
				
_root.attachMovie("MO_bottom42", "MO_bottom42", 53);
_root.MO_bottom42._x = 630;
_root.MO_bottom42._y = my_nextYpos + _root["Bild2"]["img2"]._height;
};//end function
				
_root["Bild2"]["img2"].onRollOut = function() {
removeMovieClip(_root.MO_top42);
removeMovieClip(_root.MO_bottom42);
};//end fuction MouseOut
			
//Bildunterschrift2 positionieren
_root["Bild1"]["img1"].nextElement_pos_y += _root["Bild2"]["img2"]._height + 10;
_root.Bildunterschrift2._y = _root["Bild1"]["img1"].nextElement_pos_y;
	
//Bild3 setzen
_root["Bild1"]["img1"].nextElement_pos_y += _root.Bildunterschrift2._height + 20;
_root["Bild3"]["img3"]._y = _root["Bild1"]["img1"].nextElement_pos_y;
	
my_nextYpos = _root["Bild1"]["img1"].nextElement_pos_y;

Gruß

Edit: Ok, da es eine onEnterFrame-Funktion ist, wird meine Variable ja mehrfach überschrieben, vorzugsweise von Bild3. Lösung ist für jedes Bild eine Variable einzuführen in der die Position dann gesetzt wird!
 
Zuletzt bearbeitet:
Zurück