JavaScript Variableninhalt als Variable behandeln

Gamer Xy1

Cadet 3rd Year
Registriert
Dez. 2009
Beiträge
39
Hallo zusammen,
ich habe diesen Code:

Code:
var activecell = function(){
	for(var i=1;i<=3;i++){
	for(var h=1;h<=4;h++){
		var xwert = i.toString();
		var ywert = h.toString();
		var querycell = "bg" + xwert + "_" + ywert;
		if(hero.x + 640 >= querycell.x && hero.x -1280 <= querycell.x && hero.y + 640 >= querycell.y && hero.y -1280 <= querycell.y){
			querycell.actv = true;
		}
		else{
			querycell.actv = false;
		}
	}
	}
};

Es geht mir um die Variable "querycell".
Der Inhalt ist immer nach dem Schema bg1_1,bg2_1,bg3_1,bg1_2, usw...
von diesen Variablen bg[irgendwas] will ich nun die Werte bg[irgendwas].x und y haben.
Durch das Darstellen mit document.write habe ich herausgefunden, dass in der if-Bedingung querycell.x nicht mit [inhaltvonquerycell].x gleichzusetzen ist...
Habt Ihr einen Tipp, wie man das lösen könnte?
Danke schon mal im Voraus ;)

Game Xy1
 
Object Notation? Du konkatenierst einen String - entweder du parst es dir raus, oder du schaust mal nach Object Notation, zB JSON ;-)
 
evtl hilft der eval-Befehl, mit dem man sich JavaScript dynamisch "zusammenbauen" kann...

also so in der Art dann
Code:
eval(querycell + ".actv = true;");


Aber ein mehrdimensionales Array wäre sicher vorzuziehen...
 
Zuletzt bearbeitet:
Mach dir lieber ein Object, eine Liste oder sonstwas.
 
Auf ein Object würde ich gerne verzichten...
eval() ist auch nicht wirklich eine Hilfe (außerdem ist das doch eine reine Kalkulationsfunktion, oder?)
JSON hab ich mir angeschaut, blick aber nicht wirklich durch... Wie soll ich den String parsen?
Könntet Ihr mir ein kleines Codebeispiel geben?
 
sowas wäre besser:
http://www.teialehrbuch.de/Kostenlose-Kurse/JavaScript/12757-Mehrdimensionale-Arrays.html

und eval kann mehr
eval("alert('Hallo');");

und das könnte sogar so funktionieren:
Code:
eval("if(hero.x + 640 >= "+querycell+".x && hero.x -1280 <= "+querycell+".x && hero.y + 640 >= "+querycell+".y && hero.y -1280 <= "+querycell+".y){\n" + 
	querycell + ".actv = true;\n" + 
	"}\n" + 
	"else{\n" + 
	querycell + ".actv = false;\n" + 
	}\n");
Ist es schön? Nein...
 
Zuletzt bearbeitet:
Code:
var abcdef = 'variable abcdef';
var esd = 'abcdef';
console.debug( esd );
console.debug( eval( 'console.debug( ' + esd + ' )' ) );
Ausgabe:
Code:
abcdef
variable abcdef
 
Der Tip mit den Arrays ist nicht schlecht, da müsste ich dann aber mein komplettes Script umschreiben...
Yuuri, deine Antwort hab ich nicht wirklich kapiert...
Bzw. wie sähe denn die Lösung mit einem Object aus?
 
Mach dir doch ne Funktion und leg einfach auf td/tr einen evenlistener (mouseenter/mouseclick). In der Funktion kannst du dann per this auf die Zelle zugreifen.

KEIN Anfänger braucht eval...
 
Gamer Xy1 schrieb:
Yuuri, deine Antwort hab ich nicht wirklich kapiert...
Gamer Xy1 schrieb:
eval() ist auch nicht wirklich eine Hilfe (außerdem ist das doch eine reine Kalkulationsfunktion, oder?)
Mein Code beinhaltet ein Beispiel, was keine Berechnung ist.
Gamer Xy1 schrieb:
Bzw. wie sähe denn die Lösung mit einem Object aus?
Code:
var abc = {}; // alternativ: = new Object();
abc.def = 'def';
abc['abc'] = 'abc';
console.debug( abc.abc ); // ergibt abc
console.debug( abc['def'] ); // ergibt def
 
Ich würde mich jetzt nicht als Anfänger bezeichnen ;)
Ich brauche eine Datenbankähnliche Struktur, da ich ein Canvas-Element mit Daten füttern will... Ich glaube kaum, dass ich das mit der Kombination Tabelle & JavaScript schaffe :D
Ergänzung ()

Code:
var bg1_1 = {
	x: -960,
	y: -960,
	actv: false,
	bild: bgImg};
Diesen Aufbau haben alle Objekte, die ich mit meiner for-Schleife abfragen will...
und auf den x und y-Wert muss ich irgendwie zugreifen...
 
Gamer Xy1 schrieb:
Ich würde mich jetzt nicht als Anfänger bezeichnen ;)

Naja also wer schreibt:

Gamer Xy1 schrieb:
JSON hab ich mir angeschaut, blick aber nicht wirklich durch... Wie soll ich den String parsen?
Könntet Ihr mir ein kleines Codebeispiel geben?

Aber man muss sich auch für nix schämen ;)

Json ist sehr simpel! Aber wenn du es nicht nutzen möchtest, dann verzichte darauf. Assoziative Arrays, listen, es gibt genug Möglichkeiten das umzusetzen, einige wurden hier schon genannt.

Simples Javascript Object Example geb ich dir hier:

Code:
var obj = new Object;
obj.x = 1;
obj.y = 2;



Aber bitte Leute, eins ist mir noch als Hinweis wichtig:

eval is evil

http://blogs.msdn.com/b/ericlippert/archive/2003/11/01/53329.aspx
http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil
and many more..

Verzichtet auf eval, denn es ist einfach zu schnell ausgehebelt wenn man nicht weiß worauf man sich einlässt!
 
Keepers schrieb:
Code:
var obj = new Object;
obj.x = 1;
obj.y = 2;
Voll retro hier. :p

Code:
var obj = {};
obj.x = 1;
obj.y = 2;

// oder direkt:

var obj = {x: 1, y: 2};

Aber mal im Ernst: Wer JS verwendet und sich nicht mit JSON auseinandersetzt, macht heutzutage was falsch. JSON bedeutet nicht umsonst JavaScript Object Notation (auch wenn es "nur" auf einer Untermenge von JS basiert).

Wie viele andere hier schon gesagt haben, sollte eval nicht verwendet werden. Es gibt nur sehr wenige Faelle in denen das ueberhaupt sinnvoll ist und darum sollte sich eine Library kuemmern, die von Nicht-Anfaengern gewartet wird.

Die Loesung in deinem Fall sind Listen (Arrays) oder Maps (Objekte). Yuuri hat das ja schon kurz und knackig zusammengefasst.
 
Hallo!

Versuch mal folgendes:
Hau all dein Zeug was mit BG zu tun hat in ein Objekt rein.
Die Bgs haben sicher eine Systematik
z.B.
Code:
var bgs=[[bg1_1,bg1_2,bg1_3],[bg2_1,bg2_2,bg2_3],......];
for(var i=0;i<bgs.length;i++){
     for(var y=0;y<bgs[i].length;y++){
          var curBg=bgs[i][y];
          var x=curBg["x"];
          var y=curBg["y"];
          var actv=curBg["actv"];
          var bild=curBg["bild"];
          //und halt was du damit machen willst
     }
}
ich hoff dass es das ist, was du brauchst
 
Zurück
Oben