aktualisieren Ich versuche, ein sehr einfaches JavaScript-Spiel mit dem HTML5 Canvas zu erstellen. Also habe ich einen Hauptspieler "class" erstellt, der beim Instanziieren und Aufrufen der "init-Methode" einen roten Kreis auf der Leinwand erzeugen soll. Schließlich sollte es auch über die Pfeiltasten steuerbar sein. Um dies zu tun, habe ich versucht, dem Dokument Ereignislistener hinzuzufügen, indem ich nach Keydown/keyup suche, die dann boolesche Werte wie leftPressed = true ändern würden; usw. Auf dieser Grundlage sollte die dispose-Methode (aufgerufen in der setInterval-Funktion draw) die Position des roten Kreises aktualisieren und darin liegt mein Problem - beim Öffnen der index.html-Datei wird der rote Kreis erstellt, aber wenn ich Drücke die Pfeiltasten, ich kann es nicht bewegen. Jede Hilfe wäre willkommen und bitte entschuldige meine Unwissenheit, ich habe vor etwa einer Woche Javascript angefangen.Javascript-Event-Listener nicht boolescher Wert
ist die js Code der Spieler "Klasse" enthält:
canvas = document.getElementById("surface");
ctx = canvas.getContext("2d");
//user controlled player class
player = function(x,y,dx,dy,radius) {
this.x = x;
this.y = y;
this.speedx = dx;
this.speedy = dy;
this.radius = radius;
this.leftPressed = false;
this.rightPressed = false;
this.upPressed = false;
this.downPressed = false;
document.addEventListener("keydown",this.onKeyDown,false);
document.addEventListener("keyup",this.onKeyUp,false);
this.init = function() {
ctx.beginPath();
ctx.arc(this.x,this.y,this.radius,0,Math.PI*2);
ctx.fillStyle = "red";
ctx.fill();
ctx.closePath();
}
this.onKeyDown = function(e) {
if (e.keyCode == 37) {
this.leftPressed = true;
}
if (e.keyCode == 38) {
this.upPressed = true;
}
if (e.keyCode == 39) {
this.rightPressed = true;
}
if (e.keyCode == 40) {
this.downPressed = true;
}
}
this.onKeyUp = function(e) {
if (e.keyCode == 37) {
this.leftPressed = false;
}
if (e.keyCode == 38) {
this.upPressed = false;
}
if (e.keyCode == 39) {
this.rightPressed = false;
}
if (e.keyCode == 40) {
this.downPressed = false;
}
}
this.displace = function() {
if (this.leftPressed) {
this.x -= this.speedx;
}
if (this.rightPressed) {
this.x += this.speedx;
}
if (this.downPressed) {
this.y -= this.speedy;
}
if (this.upPressed) {
this.y += this.speedy;
}
}
}
Hier ist der main.js Code:
canvas = document.getElementById("surface");
ctx = canvas.getContext("2d");
ctx.fillStyle = "black";
ctx.fillRect(0,0,canvas.width,canvas.height);
player1 = new player(500,500,7,7,25);
function draw() {
ctx.fillStyle = "black";
ctx.fillRect(0,0,canvas.width,canvas.height);
player1.init();
player1.displace();
}
setInterval(draw,10);
Die Lambda-Syntax funktionierte einwandfrei. Ich habe mich sehr geärgert über dieses Problem, da die Entwicklerkonsole keine Fehler zeigte. Ich habe mich gefragt, ob Sie mich auf eine Lernressource für JS hinweisen könnten, die solche Dinge abdeckt (Lambda). In den meisten Fällen habe ich Video-Tutorials gesehen, in denen nur die absoluten Grundlagen erklärt wurden. Nochmals, sehr viel! – TheLousyCoder
Ich weiß nicht wirklich von einer aktuellen JS-Ressource, sorry. Aber yeah, die Konsole würde dafür keinen Fehler anzeigen, weil "this" sich immer noch auf _something_ bezieht und der Callback ziemlich erfolgreich eine 'leftPressed'-Flagge zu dem hinzugefügt hat, was auch immer das Ding war. Es war einfach nicht, wo dein Code danach suchte. –