setTextFormat-Rollovereffekt bei dynamisch generierten Menu funktioniert nicht!

poli-dori

Erfahrenes Mitglied
Hi,
ich lasse mit dulpicateMovieClip ein Menu generieren, welches seine Informationen aus einer Textdatei einliest. Es funktioniert gut, leider hänge ich jetzt an einem anderen Problem. Die Menübuttons sollen einen Rollovereffekt bekommen (einfach fettgedruckt) den ich via setTeextFormat steuere. Jedoch wirkt sich der Effekt nur auf den letzten der generierten Buttons aus. Ich verstehe nicht wo das Problem ist. Bitte schaut euch mal den AS an und bitte helft mir!
PHP:
stop();
//
m_button._visible = false;
kunden = new LoadVars();
kunden.load("clients/clientsmenu.txt");
kunden.onLoad = function() {
	//
	bold = new TextFormat();
	bold.bold = true;
	regular.align = "right";
	//
	regular = new TextFormat();
	regular.bold = false;
	regular.align = "right";
	//
	mein_str = kunden.clients;
	//clients ist der Variablenname in clientsmenu.txt
	menu_array = mein_str.split(",");
	//Hier wird die Funktion makeMenu definiert
	function makeMenu() {
		var y = 110;
		var max = menu_array.length;
		for (i=1; i<max; i++) {
			arraybuttons = m_button.duplicateMovieClip("m_button_"+i, i);
			arraybuttons._y = y;
			//Y-Wert für de ersten der duplizierte Clips
			y += 22;
			arraybuttons.b_text.text = menu_array[i];
			trace(arraybuttons.b_text.text);
			//
			arraybuttons.b_1.onRollOver = function() {
				arraybuttons.b_text.setTextFormat(bold);
				trace("FETT");
			};
			arraybuttons.b_1.onRollOut = function() {
				arraybuttons.b_text.setTextFormat(regular);
			};
		}
	}
	//Hier wird makeMenu ausgeführt
	makeMenu();
};
THX
MFG
 
Hi,

probiers mal mit:
PHP:
arraybuttons.b_1.onRollOver = function() {
    this._parent.b_text.setTextFormat(bold);
    trace("FETT");
}
arraybuttons.b_1.onRollOut = function() {
    this._parent.b_text.setTextFormat(regular);
}
Du verwendest "arraybuttons" ja quasi als Laufvariable für alle Duplikate. Die Variable hat nach der Schleife den Wert der letzten erstellten Instanz. Mit this beziehst Du Dich dagegen auf das aktuelle Objekt, das das Ereignis ausgelöst hat, und mit this._parent damit auf den Button.

Gruß
.
 
Hi,
danke für deine Antwort.
Leider klappt es mit this._parent davor auch nicht...
ich versteh trotzdem nicht wieso es sich nur auf den letzten der erstellten buttons auswirkt, denn das ganze befindet sich ja IN der Schleife...
man müsste es schaffen, von ausserhalbder Schleife auf die einzeln erstellten Buttons zugreifen zu können, denn ich möchte dann natürlich auch, dass meine Buttons etwas auslösen, und natürlich soll jeder Button eine andre Funktion haben!

Hat jemand ne Idee?

THX
MFG
 
Zuletzt bearbeitet:
Hi,

nein das klappt nicht, weil zu dem Zeitpunkt, zu dem die rollOver-Funktion ausgelöst wird (nämlich beim MouseOver) ist die Schleife natürlich schon längst abgearbeitet und die (einzige) Variable kann nicht mehrere Werte zur selben Zeit annehmen.

man müsste es schaffen, von ausserhalbder Schleife auf die einzeln erstellten Buttons zugreifen zu können
Ich würde Dir raten, ein Array für die Buttons anzulegen, und jedem Button vielleicht auch noch seinen Index als Member übergeben. Damit kannst Du jeder Instanz unterschiedliche Aktionen geben.

Gruß
.
 
Hallo,
danke für deine Geduld,
aber ich glaube dass ich nicht weiß wie ich jetzt vorgehen soll um das zu tun was du mir erklärt hast!.
Ich würde Dir raten, ein Array für die Buttons anzulegen, und jedem Button vielleicht auch noch seinen Index als Member übergeben. Damit kannst Du jeder Instanz unterschiedliche Aktionen geben.
Wie sollte ich das AS verändern um das zu erreichen was du mir vorschlägst?

THX
MFG
 
Also:

Ich gehe davon aus, bei "arraybuttons" handelt es sich um MovieClips, die jeweils folgendes enthalten:

- ein Textfeld mit dem Instanznamen "b_text"

- Einen MovieClip mit dem Instanznamen "b_1", der als Schaltfläche (fürs rollOver) fungiert.

Dann müsste eigentlich (auch ohne Array) folgendes klappen:
PHP:
for (i=1; i<max; i++) {
    arraybuttons = m_button.duplicateMovieClip("m_button_"+i, i);
    arraybuttons._y = y;
    y += 22;
    arraybuttons.b_text.text = menu_array[i]; // Hier ist i noch bekannt
    arraybuttons.b_1.onRollOver = function() {
        // Hier ist die Schleife längst vorbei:
       this._parent.b_text.setTextFormat(bold);
    }
    arraybuttons.b_1.onRollOut = function() {
        // Wenns nicht klappt, gib mal das Ziel aus:
        trace(this._parent.b_text); // Ist es das Textfeld?
        this._parent.b_text.setTextFormat(regular);
    }
}

Gruß
.
 
noch eine Frage....

Hi,
bin immer noch total happy dass es endlich funktioniert! :-)
Nun stehe ich vor dem hoffe ich letzten Problem für dieses Projekt.
Ich habe jedem der Namen im Array auch ein Bild zugewiesen, das in ein Container-MC geladen wird wenn ich auf die dynamisch generierten Buttons klicke. ein klick auf Button "n" ladet Bild "n".
Da wäre es wieder von Vorteil wenn man mit unsrer Zählvariable "i" arbeiten könnte.
Hier der AS:
PHP:
stop();
//
m_button._visible = false;
kunden = new LoadVars();
kunden.load("clients/clientsmenu.txt");
kunden.onLoad = function() {
	//
	bold = new TextFormat();
	bold.bold = true;
	regular.align = "right";
	//
	regular = new TextFormat();
	regular.bold = false;
	regular.align = "right";
	//
	mein_str = kunden.clients;
	//clients ist der Variablenname in clientsmenu.txt
	menu_array = mein_str.split(",");
	//Hier wird die Funktion makeMenu definiert
	function makeMenu() {
		var y = 110;
		var max = menu_array.length;
		for (i=1; i<max; i++) {
			arraybuttons = m_button.duplicateMovieClip("m_button_"+i, i);
			arraybuttons._y = y;
			//Y-Wert für de ersten der duplizierte Clips
			y += 22;
			arraybuttons.b_text.text = menu_array[i];
			arraybuttons.b_1.onRollOver = function() {
				this._parent.b_text.setTextFormat(bold);
			};
			arraybuttons.b_1.onRollOut = function() {
				this._parent.b_text.setTextFormat(regular);
			};
			arraybuttons.b_1.onRelease = function() {
				bild_container.loadMovie("clients_"+i+".jpg");
				//ich möchte dass der Button mit dem Index "n" auch das bild Nr."n" ladet, da ich jedem Namen im Array auch ein Bild zuordnen möchte!
			};
			//trace(arraybuttons.b_text.text);
			//
		}
	}
	//Hier wird makeMenu ausgeführt
	makeMenu();
};
Ich checks einfach nicht wie ich das "i" auch "später" im Script nutzen kann!

MFG
 
Zurück