Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-11-2006, 21:01   #1 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
dynamischer Wert als Inhalt einer variable - geht das in as?

Hallo,
Das hier ist mein erster Post. Ich bin leider kein großer Actionscripter sondern eher ein Anfänger, und nun hab ich da mal ne Frage.

Und zwar möchte ich in Actionscript einen Wert in einer Variablen speichern. Dies soll aber kein bestimmter Wert sein sondern ein Wert der für einen belibigen Buchstaben von a-z stehen kann. Sozusagen eine vorher nicht definierte Variable als Wert in einer Variablen. Ich hoffe das ist verständlich. Das ist etwas kompliziert das zu erklären.

Es geht darum, dass ich mehrere Variablen habe, die denselben Namen haben mit Ausnahme eines Buchstabens am Ende.Eine davon hat den Wert "true" und soll ihn auch behalten. Die übrigen können "true" sein, sollen aber false sein, wenn eine andere "true" ist. Also Wie ein Radio-Button, wenn einer aktiviert ist dann sollen die anderen zurückgesetzt werden.
Nun möchte ich aber nicht jede Variable einzeln zurücksetzen, sondern alle gleichzeitig.

Hoffe da kann mir jemand helfen. Vielen Dank schonmal im voraus.
Cörv ist offline   Mit Zitat antworten
Alt 11-11-2006, 22:23   #2 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Hallo und willkommen im Flashforum.

Bin nicht sicher ob ich Dich verstanden habe …
Du kannst Variablen dynamisch ansprechen.
Wenn Deine Variablen z.B. test1 bis test20
heißen, kannst Du sie alle so ansprechen:
PHP-Code:
for (i=1i<=20i++) {
    
this["test"+i] = true;

Bei Buchstaben ist es etwas komplizierter,
aber bei den Buchstaben des Alphabets geht
es z.B. so (der Einfachkeit halber hier nur mit
den ersten fünf):
PHP-Code:
chars = new Array("a""b""c""d""e");
for (
i=0i<20i++) {
    
this["test"+chars[i]] = true;

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 11-11-2006, 23:31   #3 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Danke für die schnelle Antwort und die nette Begrüßung.

Zitat:
Bin nicht sicher ob ich Dich verstanden habe …
Das hab ich mir gedacht, weil das ja auch so super schwer ist zu erklären. Aber ich glaub das was du geschrieben hast ist schon so ungefähr das was ich suche.

Das was ich machen will ist sowas wie ein kleiner Psychotest, den man so aus Zeitschriften kennt, nur halt in Flash. Bei den ersten Fragen sind Mehrfachauswahlen möglich, also mit Checkboxen. Und das funktioniert auch alles bestens. Bei Frage 3 und 4 brauche ich allerdings Radio-Buttons.

Wenn ich jeden Radiobutton einzeln zurücksetze, dann klappt es auch wunderbar. Aber ich würde gerne eine Funktion haben, die ich für jeden Radiobutton benutzen kann und die dann alle Radio-Buttons deaktiviert, bis auf den, den ich gerade angeklickt habe.

Ich hab da folgenden Code geschrieben:
Code:
function statusRadio(){
	if (_root["checked"+i+a] != true){
		checkit();
	} else{
		uncheckit();
	}
	if (_root["checked"+i+b] == true & _root["checked"+i+b] != _root["checked"+i+a]){
			_root["f"+[_root.i]+[_root.b]+"_mc"].gotoAndStop("nein");
			_root["checked"+i+b] = false;
			_root.punkte -= wert;
	}
}
_root["checked"+i+a] ist dabei die Variable, die besagt, ob der Radio-Button aktiv oder inaktiv ist. i ist dabei die Nummer der Frage, bei der ich mich gerade befinde und a ist die Antwort, die ich angeklickt habe. Ausgeschrieben könnte sie also so aussehen _root.checked3e = true;. In diesem Falle hätte ich bei Frage 3 auf die Antwort e geklickt und den entsprechenden Radio-Button somit aktiviert.

Bis dahin funktioniert es auch noch. Nun kann es ja sein, dass ich vorher schon auf einen anderen Radio-Button geklickt und aktiviert habe. Der soll jetzt natürlich deaktiviert werden. Da ich aber praktisch auf jeden Radio-Button geklickt haben könnte, bis auf den mit der Variablen _root.checked3e müssten ja alle deaktiviert werden, bis auf eben dieser.

Da hab ich mir diese Zeile hier ausgedacht:
Code:
if (_root["checked"+i+b] == true & _root["checked"+i+b] != _root["checked"+i+a]){
b ist hierbei die Variable, die mir Kopfzerbrechen bereitet. Sie soll alle Antwortmöglichkeiten abdecken. Also alle Radio-Buttons auf einen Schlag zurücksetzen, aber nicht mit a übereinstimmen, damit nicht der Radio-Button deaktiviert wird, auf den ich zuletzt geklickt habe.

Ich habe b jetzt mal, wie du geschrieben hast folgenden wert zugewiesen:
Code:
b = new Array("a", "b", "c", "d", "e");
Aber das hat nicht geklappt. Kenn mich mit Arrays auch noch nicht so aus, weil bin wie gesagt ein blutiger, hilfebedürftiger Anfänger.

Ich hoffe ich konnte mein Problem etwas verständlicher machen. Wäre auf jeden Fall suuuuuuuuper dankbar, wenn mir da jemand Erleuchtung schenken könnte.
Cörv ist offline   Mit Zitat antworten
Alt 11-11-2006, 23:51   #4 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Sehe ich es richtig, daß jede Frage aber für sich selber steht?
Also Du mußt nicht auch noch die Radiobuttons von Frage 2 oder 4
mit deaktivieren? Dann würde ich es vielleicht so machen:

PHP-Code:
buttonNames = new Array("a","b","c","d","e");

function 
deactivateRadioButtons(frageNrbuttonChar) {
  for (
i=0i<5i++) {
    if (
buttonNames[i] != buttonChar) {
      
_root["checked"+frageNr+buttonNames[i]] = false;
    } else {
      
_root["checked"+frageNr+buttonNames[i]] = true;
    }
  }

Diese Funktion deaktiviert alle Buttons einer Frage,
die nicht mit dem übergebenen Wert von »buttonChar«
übereinstimmen. (Zumindest hoffe ich das, da ich die
Funktion nicht getestet habe).

Aufgerufen wird das ganze dann per:
PHP-Code:
deactivateRadioButtons(3"d"); 
Hoffe das hilft Dir weiter.

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 12-11-2006, 00:25   #5 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Hui, du bist ja der Größte! Um diese Uhrzeit dem Cörv noch mit seinen Problemchen beizustehen. Also vielen Dank.

Werds auf jeden Fall sofort ausprobieren. Muss aber zugeben, so ganz hab ich die Funktion noch nicht verstanden.

Was macht denn z.B. die i Variable. Ist die irgendwie dazu gut, um auf die einzelnen Inhalte des Arrays zuzugreifen? Würd ja passen, sind ja 5 Buchstaben drin und son Array fängt doch immer bei 0 an, oder? Aber wenn ja, wie weiß Flash denn das i sich ausgerechnet auf das Array bezieht.
Ne, warte ich glaub ich weiß, hier buttonNames[i] wird die Zahl i an das Array übergeben und das spuckt dann den jeweiligen Buchstaben mit der Zahl aus richtig? Na, denn hab ichs doch verstanden.

Vielen, vielen Dank. Ich sag bescheid, obs geklappt hat. Und wenn nich dann sehen wir uns morgen wieder hier.
Cörv ist offline   Mit Zitat antworten
Alt 12-11-2006, 00:35   #6 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Zitat:
Zitat von Cörv Beitrag anzeigen
… und das spuckt dann den jeweiligen Buchstaben mit der Zahl aus richtig?
Richtig.

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 12-11-2006, 10:57   #7 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Hallo, ich bins wieder.

Hab das Script gestern noch ausprobiert, aber leider hat es noch nicht funktioniert. Ich glaub das kommt sich da noch mit ner anderen Funktion ins Gehege. Ich komm aber nich drauf wie.

Ich hab also deine Funktion folgendermaßen übernommen:
Code:
function uncheckRadios(i, a){
	for (j=0; j<5; j++) {
    	if (b[i] != a) {
      		_root["checked"+i+b[j]] = false;
   	 } else {
     	 	_root["checked"+i+b[j]] = true;
    	}
        } 
}
Und die rufe ich dann in der Funktion statusRadios():
Code:
function statusRadio(){
	if (_root["checked"+i+a] != true){
		checkit();
	} else{
		uncheckit();
	}
	_root.uncheckRadios(i, a);
}
Diese wird dann wiederum beim Klick eines der Radio-Buttons aufgerufen:
Code:
on (release) {
	_root.a = "e";
	_root.wert = 50;
	_root.statusRadio();
}
Ich hab das Gefühl, dass sich das Script nicht mit der Funktion uncheckit(); verträgt. Weil, wenn ich den Flashfilm exportiere, und auf einen Radio-Button klicke, dann spielt er immer wieder die Funktion checkit() ab. Was ja eigentlich soviel bedeuten müsste, dass er die checked-Variable des Radio-Buttons jedesmal nachdem er die checkit()-Funktion abgespielt hat wieder auf False setzt. Was wieder der if-Bedingung der checkit-Funktion entspricht und er sie dann immer wieder abspielt. Oder hab ich da nen Drehwurm im Kopf?

Ich wär für Hilfe wieder überaus dankbar.
Cörv ist offline   Mit Zitat antworten
Alt 12-11-2006, 11:54   #8 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Aha, ein kleiner Erfolg!

Bei der Funktion uncheckRadios() hat sich ein kleiner Tippfehler eingeschlichen.

Code:
function uncheckRadios(i, a){
	for (j=0; j<5; j++) {
    	if (b[i] != a) {
      		_root["checked"+i+b[j]] = false;
   	 } else {
     	 	_root["checked"+i+b[j]] = true;
    	}
        } 
}
hab vergessen ein i durch ein j zu ersetzen. Nun läuft auch die Funktion uncheckit() wieder richtig. Allerdings werden die anderen Radio-Buttons immernoch nicht zurückgesetzt. Aber ich bleib dran.
Cörv ist offline   Mit Zitat antworten
Alt 12-11-2006, 13:14   #9 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Warum ist das j da überhaupt drin?
Du brauchst doch das i als Laufvariable
in der for-Schleife und nicht das j.

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 12-11-2006, 13:28   #10 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
i ist bei mir ja schon die Fragennummer, da hab ich als Laufvariable dann einfach j genommen, oder kann man da nur i nehmen?
Cörv ist offline   Mit Zitat antworten
Alt 12-11-2006, 13:32   #11 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Dann mußt Du diese Zeile aber auch anpassen:

if (b[j] != a) {

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 12-11-2006, 13:44   #12 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Ja, den Fehler hatte ich zuerst gemacht. Hat auch was gebracht, die uncheckit(), hatte danach auch wieder funktioniert. Aber die anderen Radiobuttons wurden danach immer noch nicht zurückgesetzt.

Super übrigens, dasde wieder da bist. Hab nämlich nochn kleines Problemchen.
Wollte nämlich gerne den Status true oder false der "checked"+i+a -Variable austracen. Da hab ich gedacht, wenn ich das hier schreibe:
Code:
trace("checked"+i+a+" = "["checked"+i+a"]);
dann würde er mir z.B.checked3d = true ausgeben. Stattdessen zeigt er mir aber checked3d = checked3d.

Wie kann ich das denn machen, dass er mir stattdessen den true oder false Wert ausgibt?
Cörv ist offline   Mit Zitat antworten
Alt 12-11-2006, 13:51   #13 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Probiers mal so:

PHP-Code:
trace("checked"+i+a+" = " _root["checked"+i+a]); 
gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 12-11-2006, 13:55   #14 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
ah, das scheint zu klappen. Super danke.

Ich glaub irgendwo scheinen sich die ganzen trues und falses noch ins Gehackel zu kommen. Ich versuch mal herauszufinden wo genau.
Cörv ist offline   Mit Zitat antworten
Alt 12-11-2006, 14:40   #15 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Ah, ich hab ihn gefunden den Fehler. *Freude*

War ein ganz blöder Fehler von mir. Ich hab in der Zeile, die dem Radio-Button-MC sagt, dass er auf aktiviert springen soll vergessen das [j] vergessen hinter die b-Variable zu setzen. Blöd von mir.

Vielen Dank dir. Dein Script hat mir echt den Tag gerettet.
Danke, Danke Danke.
Cörv ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele