Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-01-2005, 15:41   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 16
Question "Variable einem construktor übergeben" [ka wie ich das nennen soll ]

hallo Flasher,

ich habe da ein Problem:
Ich möchte den Inhalt eines Arrays mittels Dynamischer Textfelder darstellen. Dafür habe ich mir ein Objekt gebastelt was u.A die Informationen die ich darstellen soll als Arrays beinhaltet:


Code:
CharData = new Object();
	CharData.Atribute = new Array();
	CharData.Atribute[0] = new Array();
	CharData.Atribute[0][1] = "STR";
	CharData.Atribute[0][0] = 10;
	CharData.Atribute[0][2] = "Stärke";
	CharData.Atribute[0][3] = "Die physische Stärke eines Charakters";
	CharData.Atribute[1] = new Array();
	CharData.Atribute[1][1] = "KON";
	CharData.Atribute[1][0] = 10;
	CharData.Atribute[1][2] = "Konstituition";
	CharData.Atribute[1][3] = "Das physische Durchhaltevermögen eines Charakters";
und stelle nun die
Abkürzung (CharData.Atribute[i][1]) und den
Wert (CharData.Atribute[i][0]) dar.

Mein Wunsch:

Ich würde gerne die Beschreibung (CharData.Atribute[i][3]) dynamisch in einem "Beschreibungsfeld" für die jeweiligen Einträge darstellen wenn der Benutzer, eines der Felder focust (onSetFocus). Ich hatte mir folgenden Zeilen einfallen lassen, nun habe ich

das Problem:

Ich bekomme das "i", das ich in der if Schleife benutze nicht in die onSetFocus = function {Klammern} .

Code:
CharXMLTextfelder = function () {
	this.createEmptyMovieClip("CTextMC", 1);
	// 10 Atribute
	for (i=0; i<10; i++) {
		var TitelName = "Titel_"+i;
		var WertName = "Wert_"+i;
		this.CTextMC.createTextField(TitelName, 50+i, i*50, 0, 30, 20);
		this.CTextMC.createTextField(WertName, 100+i, i*50, 35, 30, 20);
		this.CTextMC["Titel_"+i].text = CharData.Atribute[i][1];
		this.CTextMC["Wert_"+i].text = CharData.Atribute[i][0];
		this.CTextMC["Titel_"+i].onSetFocus = function() {
			this.CTextMC.createEmptyMovieClip("hilfe", 1);
			this.CTextMC.hilfe.createTextField("hilfeTxT", 1, 100, 100, 200, 40);
			this.CTextMC.hilfe.hilfeTxT.text = CharData.Atribute[i][3];
		};
	}
};
Habe ich da was mit dem Gültigkeitsbereich der Variablen verwechselt, oder warum bekomme ich bei folgender Modifikation:

Code:
this.CTextMC["Titel_"+i].onSetFocus = function() {
			this.CTextMC.createEmptyMovieClip("hilfe", 1);
			this.CTextMC.hilfe.createTextField("hilfeTxT", 1, 100, 100, 200, 40);
			this.CTextMC.hilfe.hilfeTxT.text = CharData.Atribute[i][3];
			trace(this._name);
			trace(i);
		};
diese Ausgabe:


//click auf Titel_1 :
Code:
Titel_1
10
//click auf Titel_2 :
Code:
Titel_2
10
Was für mich bedeutet das alle onSetFocus = functions irgendwie das gleiche "i" besitzen

Frage:

Wie bekomme ich es hin das in der onSetFocus = function das entsprechende "i" festgehalten wird, ohne das ich die Variablen über den Namen os. ermitteln muß. Hoffe wan versteht mich - ich jedenfalls das nicht
some0ne ist offline   Mit Zitat antworten
Alt 29-01-2005, 17:57   #2 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Zitat:
Zitat von some0ne
Was für mich bedeutet das alle onSetFocus = functions irgendwie das gleiche "i" besitzen
Da denkst du in die richtige Richtung: wenn du innerhalb einer Schleife mit einer Zählervariable Funktionen/Methoden definierst, hat der Zähler innerhalb der Funktion dann immer den letzten Wert... du müsstest das zu jedem Schleifendurchlauf gehörige i quasi als Eigenschaft an deine Objekte kleben, also so:
ActionScript:
  1. this.CTextMC["Titel_"+i].onSetFocus = function() {
  2.   this.CTextMC.createEmptyMovieClip("hilfe", 1);
  3.   this.CTextMC.hilfe.id = i; // <-- hier
  4.   this.CTextMC.hilfe.createTextField("hilfeTxT", 1, 100, 100, 200, 40);
  5.   this.CTextMC.hilfe.hilfeTxT.text = CharData.Atribute[i][3];
  6.   trace(this._name);
  7.   trace(this.id); // <-- und hier
  8. };

btw willkommen im FF
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)

Geändert von sonar (29-01-2005 um 17:59 Uhr)
sonar ist offline   Mit Zitat antworten
Alt 29-01-2005, 22:44   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 16
Zitat:
btw willkommen im FF
danke Dir sonar, ist aber mehr ein re, habe nach langer Pause meinen benutzer hier vergessen /blush


also nur nochmal zum besseren Verständniss :

Code:
this.CTextMC["Titel_"+i].onSetFocus = function() {
  this.CTextMC.createEmptyMovieClip("hilfe", 1);
  this.CTextMC.hilfe.id = i; // <-- hier ist das "i" aus der übergeordneten for-schleife noch gültig ?!? ich meine onFocus wird ja nicht in der for-schleife aufgerufen OoO
  this.CTextMC.hilfe.createTextField("hilfeTxT", 1, 100, 100, 200, 40);
  this.CTextMC.hilfe.hilfeTxT.text = CharData.Atribute[this.id][3]; //<-- und hier würde ich es dann brauchen, wobei es bei aufruf der onFocus-function immer 10 ist ;/
  trace(this._name);
  trace(this.id); // <-- und hier ist nur zur Kontrolle
};
Nur was mich wundert ist das es "i" überhaupt noch gibt OoO "undefined" hätte ich verstanden, nur warum zum Geier ist "i" in der for-schleife gültig, auch in der onFocus-definition, aber dann (also nach Abschluß der onFocus-definition) ist quasi rückwirkend in jeder onFocus-funktion i = 10 ?

Wenn ich das durchschaue verstehe ich u.U auch andere Probleme dieser Art die auf mich zukommen ...

// edit: habe ich versucht - funzt nisch - u.U weil:

"this.CTextMC.hilfe" ja erst bei onFocus dynamisch erstellt wird, also bei der definition von this.CTextMC.hilfe.id = i , this.CTextMC.hilfe noch garnicht existent ist.

Ich denke ich verschachtele die beiden Textfelder

this.CTextMC.createTextField(TitelName, 50+i, i*50, 0, 30, 20);
this.CTextMC.createTextField(WertName, 100+i, i*50, 35, 30, 20);

in einem weiteren MC so das ich die hilfeID dort speichern kann ... ich halte Euch auf dem Laufenden ...

Geändert von some0ne (29-01-2005 um 23:00 Uhr)
some0ne ist offline   Mit Zitat antworten
Alt 29-01-2005, 22:52   #4 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Nee sorry, hatte den falschen Code-Block zitiert... das i muss natürlich in der for-Schleife, aber außerhalb der onSetFocus-Definition als id den Objekten "angeklebt" werden... (also dem CTextMC, wenn ich das diesmal richtig seh...)
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 29-01-2005, 23:04   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 16
das ging ja schnell ;D

hm verstehe ich nicht denn wenn ich es außerhalb der onFocus-function mache dann ist es in CTextMC, als hätte ich da ein Array was alle IDs der 10 onFocus-funktionen verwaltet, nur frage ich mich wozu - habe ich doch alles schon in einem Array ;/

zur not fällt mir nurnoch ein an hand von this._name -> Titel_1 bis Titel_10 die ID zu slice(); en und darüber das fehlende "i" zu ersetzen - oder noch wer ne andere Idee ?

Im grunde genommen wäre das so schön ... /cry
some0ne ist offline   Mit Zitat antworten
Alt 30-01-2005, 04:38   #6 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 16
gelöst ;D

// EDIT:

OK also doch so wie du sagtest, nur das ich den Textfeldern Werte zuweisen kann, was ich nicht wußte - ergo keine Not für MC´s wie ich ogen dachte, habe es jetzt so :

Code:
for (i=0; i<10; i++) {
		var TitelName = "TATR_"+i;
		var WertName = "WATR_"+i;
		this[TitelName].text = CharData.Atribute[i][1];
		this[WertName].text = CharData.Atribute[i][0];
		this[TitelName].meineID = i;
		this[TitelName].onSetFocus = function() {
			this._parent.infoTXT.text = CharData.Atribute[this.meineID][3];
		};
		this[TitelName].onKillFocus = function() {
			this._parent.infoTXT.text = "";
		};
	};
und es funzt - wie schön !
jetzt kann ich viel schöne Sachen mit meinem so mühevoll gebasteltem Array machen - das was ich hier poste ist immer nur ein kl. Ausschnitt, ich lösche ne mänge wech auch wenn ich mir noch was für eine Lösung mit dynamisch erzeugten Texfeldern überlegen muß ;D aber so ist auch erstmal ok ...

danke dir nochmal für den entscheidenden Anstoß sonar !
some0ne ist offline   Mit Zitat antworten
Alt 30-01-2005, 10:44   #7 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
War mir auch nicht so wirklich bewusst, dass man Textfeldern eigene Eigenschaften zuweisen kann... aber warum auch nicht. Gut, wenn's denn klappt!
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar 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 08:27 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele