Variablen sollen zur Laufzeit gelöscht werden

dubmonster

Grünschnabel
Hallo zusammen. Ich habe ein Problem, an dem ich derzeit etwas verzweifle...
Ich möchte eine Art Quiz erstellen, bei wechem die Fragen 1-20 auf der Timeline verteilt sind. Nun muss entsprechend bei jeder Frage ein 50/50 Joker mit eingebaut werden. Das Problem besteht darin, dass ich versuche von Frame zu Frame die Vars zu überschreiben. Es werden jedes mal neue Objekte erstellt, die eigentlich die alten vorigen überschreiben sollen. Nun ist das Problem, dass die Werte der Objekte teilweise überspielen..

Hier mal der Code. Er wiederholt sich dann von Frame zu Frame, somit dann nur der Code aus einer Frame.

/******************************************************************************/

var quest_txt:String = "Frage";
var right_txt:String = "Möglichkeit1";
var wrong1_txt:String = "Möglichkeit2";
var wrong2_txt:String = "Möglichkeit3";
var wrong3_txt:String = "Möglichkeit4";


this.createTextField("frage_txt",1,31, 229,740,110);
frage_txt.multiline = true;
frage_txt.wordWrap = true;
frage_txt.textColor = 0xFFFFFF;
frage_txt.text = quest_txt;

var txt_fmt:TextFormat = new TextFormat();
txt_fmt.color = 0xFFFFFF;
txt_fmt.underline = false;
txt_fmt.size = 24;
txt_fmt.align = center;
txt_fmt.bold = true;
frage_txt.setTextFormat(txt_fmt);

//Antwortboxen****oben_links********************************************

_root.createTextField("antwort_fld", getNextHighestDepth(), 31, 402, 234, 50);
antwort_fld.multiline = true;
antwort_fld.wordWrap = true;
antwort_fld.textColor = 0x000000;
antwort_fld.color = 0x9999CC;
antwort_fld.text = wrong1_txt;

var txt_fmt:TextFormat = new TextFormat();
txt_fmt.color = 0x000000;
txt_fmt.underline = false;
txt_fmt.size = 20;
txt_fmt.align = CENTER;
txt_fmt.bold = true;
antwort_fld.setTextFormat(txt_fmt);

//Antwortbox2****oben_rechts********************************************

_root.createTextField("antwort_fld2", getNextHighestDepth(), 501, 402, 234, 50);
antwort_fld2.multiline = true;
antwort_fld2.wordWrap = true;
antwort_fld2.textColor = 0x000000;
antwort_fld2.color = 0x9999CC;
antwort_fld2.text = wrong2_txt;

var txt_fmt:TextFormat = new TextFormat();
txt_fmt.color = 0x000000;
txt_fmt.underline = false;
txt_fmt.size = 20;
txt_fmt.align = CENTER;
txt_fmt.bold = true;
antwort_fld2.setTextFormat(txt_fmt);

//Antwortbox3****unten_links*******************************************

_root.createTextField("antwort_fld", getNextHighestDepth(), 31, 502, 234, 50);
antwort_fld3.multiline = true;
antwort_fld3.wordWrap = true;
antwort_fld3.textColor = 0x000000;
antwort_fld3.color = 0x9999CC;
antwort_fld3.text = right_txt;

var txt_fmt:TextFormat = new TextFormat();
txt_fmt.color = 0x000000;
txt_fmt.underline = false;
txt_fmt.size = 20;
txt_fmt.align = CENTER;
txt_fmt.bold = true;
antwort_fld3.setTextFormat(txt_fmt);

//Antwortbox4****unten_rechts*******************************************

_root.createTextField("antwort_fld4", getNextHighestDepth(), 501, 502, 234, 50);
antwort_fld4.multiline = true;
antwort_fld4.wordWrap = true;
antwort_fld4.textColor = 0x000000;
antwort_fld4.color = 0x9999CC;
antwort_fld4.text = wrong3_txt;

var txt_fmt:TextFormat = new TextFormat();
txt_fmt.color = 0x000000;
txt_fmt.underline = false;
txt_fmt.size = 20;
txt_fmt.align = CENTER;
txt_fmt.bold = true;
antwort_fld4.setTextFormat(txt_fmt);



//Tastatureingaben_abfangen_und_verarbeiten*****************************

var keyListener_obj:Object = new Object();

keyListener_obj.onKeyDown = function() {
switch (Key.getCode()) {
case Key.RIGHT :
trace("rechts gedrueckt");
antwort_fld2.textColor = 0xD6D6D6;
antwort_fld4.textColor = 0xD6D6D6;
break;
case Key.LEFT:
trace("links gedrueckt");
antwort_fld3.textColor = 0x006600;
break;
case Key.UP:
trace("hoch gedrueckt");
break;
case Key.DOWN:
trace("down gedrueckt");
break;
}
};

Key.addListener(keyListener_obj);

function delete_vars(){
delete(antwort_fld.textColor);
delete(antwort_fld2.textColor);
delete(antwort_fld3.textColor);
delete(antwort_fld4.textColor);

delete(antwort_fld);
delete(antwort_fld2);
delete(antwort_fld3);
delete(antwort_fld4);
}

delete_vars();


/**Code Ende*******************************************************/

Ich weiss das es an manchen Stellen diletantisch gelöst ist, aber es geht hier nur um eine Präse, die im Hintergrund gesteuert werden soll. Nun ist es so, dass wenn die rechte Pfeiltaste gedrückt wird, sollen 2 Antoworten wegfallen, beim Drücken der linken Pfeiltaste soll die Antwort grün erscheinen. Nun verschwinden aber bei -> drücken alle Antworten, und bei <- drücken werden 3 Möglichkeiten grün. Ich denke das rühmt daher, dass die Werte der vorigen Frames mit überspielen. Kann es am Event-Handler liegen, oder ist es nicht möglich die Werte/ Objekte direkt zu überschreiben :confused: Das löschen der Vars, bzw der Attribute funktioniert so auch nicht,.. Bin leider Gottes mmega im Zeitdruck, weil das morgen früh fertig sein soll...
Ich hoffe ich hab mich halbwegs verständlcih ausgedrückt, bzw konnte mein Problem gut erläutern.
Verzeiht den lapidaren Code, aber ich sitz erst seit 3 Tagen an Flash.
Ich hoffe mir kann jmd helfen.
Mfg
dubmonster
 
Welche Variablen denn genau? Wieso schreibst du 50 mal den selben Code? Meistens ist es besser, einen Code nur einmal zu haben, der dann für alle Fragen gilt. Sind die Anzeigen der 50 Fragen denn so verschieden, dass du 50 Frames dafür bracuhst?
 
SInd nur 20, aber das ist ja dann letzten Endes nen einfaches Copy/Paste. Es sind 20 verschiedene Fragen. die Antworten sollen nicht immer im gleichen Feld liegen. Somit ändere ich nur die Antwortenverteilung und den Text für die Fragen/ Antworten.
So war es für mich nun die einfachste Lösung, weil ich keine Zeit habe m ich hier groß in Flash einzuarbeiten,..
 
Zuletzt bearbeitet:
Magst du mal die fla posten? Schau dir mal Arrays an. Dann hast du sowas wie frage[1] und antwort[1][3] oder so, immer der Selbe code in tausend Schlüsselbildern ist nichts schönes.

Achso, dass du immer wieder den selben EventListener erstellst kann auch Probleme machen. Schau dir dazu mal die removeEventListener-Funktion an.
 
Die flv möchte ich hier in Reinform nicht posten, da diese noch zahlreiche Tweens mit persönlichen Fotos/ Sprüchen beinhaltet. Der relevante Teil wäre somit nur der Codeteil den ich gepostet hab. Dieser wird 20mal repliziert und die Anordnung der Texte variiert. Die flv jetzt noch "netztauglich" zu machen würde auch zu zeitintensiv..
Aber mit dem removeListener() hab ich mir grad mal angeschaut, aber die Erklärungen beziehen sich immer auf ein mc. Hab nun versucht ihn an mehreren Stellen einzufügen, aber erfolglos,.. Hast du einen Vorschlag, an welcher Stelle ich ihn einfügen müsste, damit er greift?
Ich dank dir schonmal im Voraus, dass du dir die Zeit nimmst ;)
 
Ohne Einsicht in deine fla ist es trotzdem schwer, dir zu helfen. Erstmal solltest du die vielen Code-Kopien abschaffen. Probier's mal so:

Die Textfelder immer wieder neu zu erstellen und dann zu löschen ist wenig sinnvoll. Also solltest du die einfach da lassen und entsprechend füttern. Erstell erstmal eine neue Ebene in der Zeitleiste mit "code", das Schlüsselbild lässt du leer und schreibst da halt nur den ganzen Code einmal rein. Erstmal kannst du da alle Textfelder erstellen (auch wenn mir schleierhaft ist, wieso du als blutiger Anfänger diese per AS erstellst und nicht einfach mti dem entsprechenden Werkzeug auf die Bühne malst).

Auch in dieses Schlüsselbild kommt folgendes:

Code:
var fragen:Array = new Array(
"Wie heißt die Hauptstadt von Deutschland?", 
"Wo liegt München?", 
"Spieglein, Spieglein an der Wand - wer ist die Schönste im ganzen Land?");

var antworten:Array = new Array(
["Berlin", "Kiel", "Köln", "Chemnitz", 0], 
["Bayern", "Babel", "Hessen", "Kasachstan", 0], 
["Petra", "Kathrin", "Schneewittchen", "Jens", 2]);

Usw. für all deine 20 Fragen. Die Zahl am Ende der 4 Antworten gibt an, welche denn richtig ist. Hier wird immer von 0 an gezählt - ist die erste Antwort richtig, muss dort also eine 0 stehen. Dann kannst du per fragen[3] und antworten[3] auf die Fragen und Antworten zugreifen - eine einzelne Antwort bekommst du mit z.B. antworten[3][2]. Auch hier wird bei 0 begonnen. Du musst dann nurnoch per z.B. antwort_fld4.text = antwort[3][3]; die Antwort-Text zuweisen. Vorteile hiervon: man kann ganz einfach die Antworten zufällig verteilen und z.B. beim 50:50 2 zufällige falsche Antworten kicken.

Jetzt zu der Funktionalität. Wie genau sucht ein Spieler sich denn eine Antwort aus? Die Pfeiltasten sind ja anscheinend nur für die Joker Mach eine Variable, die angibt, welche Frage grad aktuell ist und nenn sie z.B. "aktuell". So greifst du immer durch fragen[aktuell] auf die aktuelle Frage zurück - setzt du "aktuell" höher und weist die Texte der Textfelder neu zu, so wird schon die neue Frage angezeigt.

Mehr kann ich ohne Einblick in die fla nicht sagen, da ich schlichtweg nicht weiß wie du es probiert hast und wie die Funktionen gedacht sind.
 
Dank dir für deine Hilfe. Ich denke dass es so hinhauen müsste,.. Die Logik dahinter verstehe ich auf jeden Fall ;)

ps: Ich hab mich vor 1,5 Jahren mal etwas damit auseinandergesetzt, deswegen kenn ich 1 2 Sachen, hab aber das Gros mittlerweile wieder vergessen, weil ich in anderen Sprachen code. Zudem will ich solche Sachen auch wirklich coden, da so etwas dann, meiner Meinnung nach, besser steuerbar ist und ich auch kein Designer bin, der meint Flash zu können und doch nur auf der Stage malt ;-)
So lernt man es dann doch am besten, finde ich persönlich... ;)

Auf jeden Fall: dickes Danke schön!
 

Neue Beiträge

Zurück