Anzeige

Variable (Boolean) wird nicht übergeben


#1
Hallo,

ich habe das folgende Problem: für eine Menüsteuerung möchte ich, nachdem eine Option gewählt wurde, für die spätere Verwendung eine Variable übergeben/ändern können. Allerdings lässt sich die Variable im späteren Verlauf des Skripts nicht mehr auslesen. Tue mich im Moment auch etwas schwer mit dem Umstieg von AS2 auf AS3 und kann mir die Problemaitk einfach nicht erklären.

Code:
var lang:int = 1;
var langSel:Boolean = false;
var btnNum:int;

//////////////////////////////////////////////////////////////////////////////////
// SPRACHE WÄHLEN
//////////////////////////////////////////////////////////////////////////////////

stage.addEventListener(MouseEvent.CLICK, langSwitch);
function langSwitch(evt:MouseEvent):void {
	switch (evt.target) {
		case menuLang.btnLang_1 :
			btnNum=1;
			lang = 1;
			langSel = true;
			trace("Deutsch ausgewählt");
			break;
			
		case menuLang.btnLang_2  :
			btnNum=2;
			lang = 2;
			langSel = true;
			trace("Englisch ausgewählt");
			break;
			
	}
}

if (langSel == true){
	trace("Sprache ausgewählt");
}
 
Zuletzt bearbeitet:

Zinken

Erfahrenes Mitglied
#3
Was meinst Du denn mit "lässt sich nicht mehr auslesen"? So wie Dein Skript jetzt aussieht, wird der Teil mit "if (langSel == true)..." ja schon abgearbeitet, bevor die Variable geändert wird. Der Trace-Befehl wird also nie aufgerufen.
 
Zuletzt bearbeitet:
#4
@kalterjava: Danke, lade ich in Kürze hoch.

@Zinken: Sobald ich einen der Buttons geklickt habe sollte doch der Rest des Skripts ausgeführt werden, oder hab ich da einen Logikfehler? Ich habe das Skript mittlwereile auch so geändert, dass die Abfrage innerhalb des Mouse Listeners verschachtelt ist –, funktioniert auch soweit. Stehe allerdings nach wie vor auf dem Schlauch wie ich die Variable ausserhalb des Mouse Listeners abfragen kann. Ist der geänderte Variablenwert ausserhalb des Mouse Listeners überhaupt noch gültig?
 
Zuletzt bearbeitet:

Zinken

Erfahrenes Mitglied
#5
Du hast da einen Logikfehler.
Der Wert ist gültig, aber es ist nicht so, dass das Skript bei einer Funktion "anhält". Das heißt, beim Start wird alles abgearbeitet, was ausserhalb Deiner Funktion steht. Die Funktion selbst wird dann vom Event-Listener bei einem Mausklick aufgerufen. Das wiederum bedeutet, dass der Wert noch gar nicht geändert wurde, wenn das Skript bei Deiner If-Abfrage ankommt.
Setz einfach die Abfrage ans Ende der Funktion.

Wenn Du erreichen willst, dass das Skript an dieser Stelle erst weiterläuft, wenn die Sprache gewählt wurde, kannst Du z.B. mit einer While-Schleife arbeiten.

Und am Rande angemerkt: sofern Du den Mausklick nur auf den Buttons abfragen willst, weise den Event-Listener besser nicht dem Stage-Objekt zu, sondern Deinen Buttons.
 
Zuletzt bearbeitet:
Anzeige
Anzeige