J'essaie de créer un jeu javascript très basique en utilisant le canevas html5. J'ai donc créé un "class" principal joueur qui est censé créer un cercle rouge sur la toile lors de l'instanciation et de l'invocation de la "méthode init". Enfin, il est également supposé être contrôlable via les touches fléchées et pour ce faire, j'ai essayé d'ajouter des écouteurs d'événements au document, en vérifiant keydown/keyup qui changerait alors les valeurs booléennes comme leftPressed = true; Sur la base de cela, la méthode de déplacement (appelée dans la fonction SetInterval dessiner) était destinée à mettre à jour l'emplacement du cercle rouge et là réside mon problème - à l'ouverture du fichier index.html, le cercle rouge est créé, mais appuyez sur les touches fléchées, je ne peux pas le faire bouger. Toute aide serait appréciée et s'il vous plaît excusez mon ignorance, j'ai commencé javascript il y a environ une semaine.L'écouteur d'événement Javascript ne met pas à jour la valeur booléenne
Voici le code js contenant le joueur "classe":
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;
}
}
}
Voici le code main.js:
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);
La syntaxe lambda a fonctionné parfaitement. Tnx beaucoup, j'ai été tellement ennuyé par ce problème que la console de développeur n'a montré aucune erreur. Je me demandais si vous pouviez me diriger vers une ressource d'apprentissage pour JS qui couvre des choses comme celles-ci (lambda). Pour la plupart, je viens de regarder des didacticiels vidéo qui ont seulement expliqué les bases absolues. Encore une fois, merci beaucoup! – TheLousyCoder
Je ne connais pas vraiment de ressource JS mise à jour, désolé. Mais oui, la console ne montrerait pas d'erreur pour cela car 'this' fait toujours référence à _something_ et le callback a réussi à ajouter un drapeau' leftPressed' à n'importe quelle chose. Ce n'était pas là où votre code le cherchait. –