• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] [JAVASCRIPT] Tetris - funktioniert nicht

Transformator

New member
Guten Morgen!

ich habe ein kleines Tetris-Spiel programmiert. Leider funktioniert es nicht richtig, es hat einmal super funktioniert, aber das ist mittlerweile eine Stunde her.
Das Problem ist, dass die Tetris-Teile pro Frame (Alle 40 Frames) eine Distanz von 4 oder 5 Blöcken zurücklegt. Außerdem funktioniert die Kollisionserkennung noch nicht so super.

Ich habe die Vermutung, dass es einfach nur (wie immer) an einem kleinen Fehler liegt, wo ich eine falsche variable benutzt habe oder so.

Das, worum ich euch bitten möchte ist einfach nur, sich das ganze Script einmal durchzulesen. Ich habe es glaube ich ziemlich übersichtlich geschrieben, also sollte das gerade mal 5 Minuten dauern. Das würde mir nämlich unglaublich helfen, denn ich finde solche Fehler irgentwie nie selber.

DANKE!

Der Code: [JavaScript] tetirs - Pastebin.com
 
Zuletzt bearbeitet von einem Moderator:
Die Logik in deiner update-Funtion ist falsch:
Code:
	update: function() {
		if(cooldown > 40) {
			var goDown = true;
			for(var i = 0; goDown && i < this.object.grid.length; i += 1) {
				var x = this.object.grid[i][0]+this.object.x;
				var y = this.object.grid[i][1]+this.object.y;
				
				if(typeof this.grid[x][y+1] === "undefined" || this.grid[x][y+1][0]){
					goDown = false;
				}
			}
			if (goDown){
				this.object.y += 1;
			}
			else {
				
				for(var i = 0; i < this.object.grid.length; i += 1) {
						var x = this.object.grid[i][0]+this.object.x;
						var y = this.object.grid[i][1]+this.object.y;
						this.grid[x][y] = [];
						this.grid[x][y][0] = true;
						this.grid[x][y][1] = this.object.color;
				}
				this.object.set_object();
			}
			cooldown = 0;
		} else {
			cooldown += 1;
		}
	}

Den Rest hab' ich mir jetzt nicht komplett angesehen, aber du solltest dich auch bei requestAnimationFrame nicht auf die Zeitabstände zwischen den Frames verlassen. Das kann auch durchaus schwanken. V.A. zwischen verschiedenen Computern.
Ich würde den "Cooldown" über window.performance.now() (https://developer.mozilla.org/en-US/docs/Web/API/Performance/now ) steuern. Damit hast du genaue Kontrolle über die Geschwindigkeit deiner Tiles.
 
Danke!

denn Logikfehler habe ich mittlerweile auch schon gefunden, aber das mit dem performance now schaue ich mir jetzt an!

Danke!

- - - Aktualisiert - - -

Nochmal was, ich habe noch einen Fehler.
Wahrscheinlich handelt es sich wieder nur um irgendeine Kleinigkeit oder so.

Folgender Fehler: wenn der Spieler eine Reihe voll macht, soll diese gelöscht werden aber es wird alles gelöscht, dann passiert etwas ganz komisches die objekte "verformen" sich, ist ganz schwer zu beschreiben sorry.

Ich habe denn Bereich mit (vermutlich) dem Fehler makiert. Eigentlich sollte es schon reichen wenn sich jemand diese 30 Zeilen durchließt.

link: http://pastebin.com/DJW9CfLA

(makierung sieht folgendermasen aus: SOMEWHERE HERE (UP / DOWN 10 LINES))

Danke!
 
Deine Logik ist mal wieder quer:
Code:
					if(clear_row) {
						var y = this.object.grid[i][1]+this.object.y;
						for(var j = y; j > 0; j -= 1) {
							for (var h=0; h < gridpoints_x; h += 1) {
								this.grid[h][j][0] = this.grid[h][j - 1][0];
								this.grid[h][j][1] = this.grid[h][j - 1][1];
							}
						}
						for(var j = 0; j < gridpoints_x; j += 1) {
							this.grid[j][0][0] = false;
							this.grid[j][0][1] = "#444";
						}
					}

PS: Deine Variablen haben nicht besonders gute Namen... ich würde j ja einmal y und einmal x nennen. y würde ich y0 oder so nennen.
 
Zurück
Oben