Einer Variable eine _neues_ Element zuweisen

cheeZy

Mitglied
Einer Variable ein _neues_ Element zuweisen

In einem Programm werden (bspw.) 9 Variablen in einem zweidimensionalen Array erstellt.
Jedem dieser Variablen weise ich in einer FOR-Schleife ein Bildelement zu.
Code:
document.writeln("<div id='bild'><img src='bild.jpg'></div>");
block[spalte][zeile] = document.getElementById("bild");

Nun möchte ich im nachhinein einer dieser Variablen ein Neues Bild zuweisen.
Was ich versucht habe, aber nicht funktioniert, ist:
Code:
document.writeln("<div id='bild2'><img src='bild2.jpg'></div>");
block[1][1] = document.getElementById("bild2");

Jemand eine Idee oder eventl. Varianten.

Die Idee bei dem Programm ist, das dies mehrere "zerstörbare" Blöcke für ein BreakOut-Klon sind. Manche Blöcke sollen aber andere Eigenschaften haben und dies soll durch andere Farben gekennzeichnet werden.
Eine Alternative wäre eventl. die Hintergrundfarbe des Elements zu ändern, dazu müssten aber die weißen Bereiche des Blocks transparent gesehen werden, wenn ihr versteht was ich mein.

Danke
 
Zuletzt bearbeitet:
Hi,

machs dir noch nicht unnötig schwer... ;)

Warum speicherst du denn das gesamte Element in dem Array? Die ID reicht doch!
HTML:
block[spalte][zeile] = "bild";


HTML:
document.getElementById(block[1][1]).src = "anderesBild.jpg";

Gruß

.:lay-z-cow..
 
Ich bin mir jetzt grad nicht sicher, ob die Frage damit dennoch beantwortet ist, jedenfalls hab ichs da nicht ganz deutlich gemacht: Ich lasse eine FOR-Schleife 9x durchlaufen in der ich jedesmal ach mom...hier der Code:
Code:
		for (i=0; i <= 8; i++) {
			document.writeln("<div id='block'><img src='block.jpg'></div>");
			block[spalte][zeile] = document.getElementById("block");
			block[spalte][zeile].style.position = "absolute";
                        (...)
		}

also. die läuft nun 9mal durch und jedesmal erstellt sie ein Bild und weist es der entsprechenden Variablen zu.
(In dem Bereich (...) erhöhe ich Spalte bzw. Zeile)

Und später möchte ich dann einfach schreiben:
Code:
document.writeln("<div id='block2'><img src='block2.jpg'></div>");
block[2][1] = document.getElementbyId("block2");

Sry, falls du die Frage schon beantwortet hattest, ich hab das so nämlich noch nicht ganz verstanden :confused:
 
Also ich hab auch versucht, dass
block[spalte][zeile] = document.getElementById("block");
einfach durch
block[spalte][zeile] = "block";
zu ersetzen, dass funtioniert net, bei mir..
 
Hi,

Ids müssen immer eindeutig sein, sonst haben sie keinen Sinn.. ;)


(Ich gehe davon aus, dass spalte und zeile ebenfalls Zähler sind)
Code:
		for (i=0; i <= 8; i++) {
			document.writeln("<div id='block" + i + "'><img src='block.jpg'></div>");
			block[spalte][zeile] = i;
			document.getElementById("block" + i).style.position = "absolute";
		}


Code:
document.getElementById('block" +block[1][1]).src = "anderesBild.jpg";

So sollte das eigentlich klappen...


Gruß

.:lay-z-cow:.
 
Ich weiß nicht genau, woran es liegt, jetzt lädt er das Bild nur einmal (oben links in die Ecke) und lässt es auch da, deswegen hier mal der Orginalquellcode (ich, weiß, nen bisschen Chaos)
Code:
for (i=0; i <= 249; i++) {
	document.writeln("<div id='block " + i + "'><img src='block.jpg'></div>");
	block[spalte][zeile] = i;
	document.getElementById("block" + i).style.position = "absolute";
	document.getElementById("block" + i).style.top = blockY + "px";
	document.getElementById("block" + i).style.left = blockX + "px";
	if (spalte > 8) {
		spalte = 0;
		zeile = zeile + 1;
		blockX = 100;
		blockY = blockY + 20;
	} else {
		spalte = spalte + 1;
		blockX = blockX + 70;
	}
}

spalte und zeile werden zu Beginn mit 0 deklariert und blockX und blockY jeweils mit 100.
(Hier sind es 10 Spalten und 25 Zeilen, sprich 250 Blöcke. Bei Bedarf kann ich auch die komplette Datei hochladen. Da herscht aber ebenso Tohuwabohu ^^
 
Zuletzt bearbeitet:
Also zum einen, hast du ein Freizeichen zu viel, wenn du den DIV schreibst.

Ich habs jetzt mal ausprobiert und bei funktioniert es:

HTML:
	block = new Array();
	spalte= 0;
	zeile = 0;
	block[zeile] = new Array();
	blockY = 100;
	blockX = 100;

	for (i=0; i <= 249; i++) {
	document.writeln("<div id='block" + i + "'><img src='block.jpg'></div>");
	block[zeile][spalte] = i;
	// geht so.... i
	document.getElementById("block" + i).style.position = "absolute";
	//oder so... block[zeile][spalte]
	document.getElementById("block" + block[zeile][spalte]).style.top = blockY + "px";
	document.getElementById("block" + block[zeile][spalte]).style.left = blockX + "px";
	document.getElementById("block" + block[zeile][spalte]).style.visibility = "visible";
	document.getElementById("block" + block[zeile][spalte]).style.backgroundColor  = "#FF0000";
	if (spalte > 8) {
		spalte = 0;
		zeile = zeile + 1;
		block[zeile] = new Array();
		blockX = 100;
		blockY = blockY + 20;
	} else {
		spalte = spalte + 1;
		blockX = blockX + 70;
	}
}

	document.getElementById("block" + block[1][1]).style.backgroundColor  = "#00FF00";
	document.getElementById("block" + block[2][2]).style.backgroundColor  = "#00FF00";
	document.getElementById("block" + block[3][3]).style.backgroundColor  = "#00FF00";

Gruß

.:lay-z-cow:.
 
kann man es auch machen, wenn man voher den array erstellt:
Code:
var block = new Array(10);
for (i=0; i < block.length; i++) { //Array block zweidimensional machen
	block[i] = new Array(25);
}
und kann man überhaupt den Hintergrund ändern, da es ja ein JPEG ist und da sieht man ja den Hintergrund eigentlich gar net, oder?



Ich stelle jetzt auch mal (die noch sehr verbuggte) [unveränderte] Orginalversion hoch. Lesen auf eigene Gefahr. Es soll der rechts gezeigte Normale Block durch einen unzerstörbaren Block (block_immun) ersetzt werden.
 

Anhänge

  • BreakOut.zip
    15,8 KB · Aufrufe: 16
Momentan habe ich das Gefühl, dass es dich nicht wirklich interessiert, was ich dir rate ;)
Code:
document.writeln("<div id='bimmun'><img src='block_immun.jpg'></div>");
block[4][5] = document.getElementbyId("bimmun");

Hör auf Elemente in dein Array zu speichern! Das nützt dir nichts!
Du schreibst nur in deinem Array rum, aber nicht in den entsprechenden HTML-Elementen.
Schau dir halt mal an, wie ich das gemacht habe... Momentan haben deine ganzen Blöcke immer die selbe id: Block.

Was im Endeffekt bedeutet, dass wir keinen Schritt weiter gekommen sind.

Gruß

.:lay-z-cow..
 
sry :( war echt keine Absicht, aber denk jetzt hab ichs geschnallt, probiere das mal aus (voraussichtlich aber erst Donnerstag) und gebe dir dann wieder ein Feedback.
Danke nochmal!
 

Neue Beiträge

Zurück