Hallo TE,
da ich denke, dass du aus diesem Thread mehr herausziehen könntest, schreibe mal ein paar generelle Zeilen.
- Falls du weiterhin beim Programmieren bleiben solltest, lies unbedingt Clean Code von Martin Fowler
- Schreib Code so, dass JEDER Programmierer den Code extrem schnell verstehen kann. Sehr viel erreichst du alleine durch gute Namen und durch Abstraktion.
Zu deinem Code im Speziellen:
Abstraktion:
alter Code:
Javascript:
var imageLebendig = new Image();
imageLebendig.src = 'assets/pics/lebendig.png';
var imageTot = new Image();
imageTot.src = 'assets/pics/tot.png';
var imageBalken = new Image();
imageBalken.src = 'assets/pics/balken.png';
neuer Code:
Javascript:
function createImage({ imagePath }) {
const image = new Image();
image.src = imagePath;
return image;
}
const imageAlive = createImage({ imagePath: 'assets/pics/lebendig.png' });
const imageDead = createImage({ imagePath: 'assets/pics/tot.png' });
const imageObstacle = createImage({ imagePath: 'assets/pics/balken.png' });
Ich habe die Logik der Bilderstellung in eine Funktion abstrahiert.
Somit kann ich in einer Zeile ein neues Bild erstellen, OHNE die Implementierung andauernd neu zu schreiben. Ein neues Bild = eine neue Zeile Code. Das Argument der Funktion ist dabei ein Objekt, sodass eindeutig ist, was das Argument überhaupt ist (der Pfad zu einem Bild).
Beispiel zum Kontext:
Javascript:
function setupGameContext() {
const canvas = document.getElementById('gc');
const context = canvas.getContext('2d');
context.fillStyle = 'blue';
return context;
}
const context = setupGameContext();
Naming:
Beispiel 1:
Eine Zeile wie
this.x = this.x + this.vx ist schwer zu verstehen. Nur weil ich weiß, dass v wahrscheinlich für velocity steht, kann ich RATEN, dass damit Geschwindigkeit gemeint ist. Und das auch nur, weil du einen Kommentar dazu schreiben musstest.
Anstatt
this.vx wäre
this.speedOnXAxis sehr viel aussagekräftiger.
Dann kannst du den Kommentar sogar löschen, weil der Name alles erklärt.
Beispiel 2:
Die Zeile
var Lebendig = new makeFigur(imageLebendig, 200, 100); // neuen Feind m. Elfen Bild verstehe ich selbst mit Kommentar nicht sofort. Das liegt daran, dass
200 und
100 Argumente sind, die ich in der
makeFigur Funktion nachschlagen muss.
const figureAlive = new createFigure({ image: imageAlive, xPositon: 200, yPosition: 100 }); wäre hier sehr viel aussagekräftiger.