2016-04-29 1 views
-1

Ich weiß, es gibt eine Menge Fragen bereits zu diesem Thema, aber es beantwortet nicht, warum mein Code nicht funktioniert. Ich kann einfach nicht meinen Kopf darum wickeln. Hier ist mein Code, nichts passiert, wenn ich eine oder d Tasten drücken.Versuchen, eine Leinwand verschieben mit Tastatur -JavaScript

canvas = document.getElementById("canvas"); 
ctx = canvas.getContext('2d'); 
var x = 40; 
var y = 40; 
var WIDTH = 40; 
var HEIGHT = 40; 
var keycode = event.keyCode; 
ctx.fillStyle = "#FF0000"; 
ctx.fillRect(x,y,WIDTH,HEIGHT); 
document.addEventListener("keydown", draw); 
function draw(){ 
    switch(keycode){ 
    case 68: 
     x += 5; 
     break; 
    case 65: 
     x -= 5; 
     break; 
    } 
    ctx.clear(); 
    ctx.fillStyle = "#FF0000"; 
    ctx.fillRect(x,y,WIDTH,HEIGHT); 
} 

<canvas id="canvas" width="500px" height="500px"></canvas> 
+0

In Ihrer Konsole können Sie den Fehler 'event is not defined' sehen. Sie befinden sich nicht in einem Bereich eines Ereignishandlers, um die Variable 'event' zu verwenden. –

Antwort

2

Sie greifen event.keyCode auf eine Variable zu früh und von der falschen Stelle.

Stattdessen ein Argument in Ihrer draw Funktion übernehmen, und verwenden Sie die which Eigenschaft (falls vorhanden und truthy) oder keyCode Eigenschaft auf, die direkt:

function draw(e){ 
// Arg -------^ 
    switch(e.which || e.keyCode){ 
// Key ----^^^^^^^^^^^^^^^^^^^^ 
     case 68: 
      x += 5; 
      break; 
     case 65: 
      x -= 5; 
      break; 
    } 
    ctx.clear(); 
    ctx.fillStyle = "#FF0000"; 
    ctx.fillRect(x,y,WIDTH,HEIGHT); 
} 

Einige Browser verwenden which, andere verwenden keyCode, das ist warum suchen wir nach which und, wenn es falsch ist, für keyCode.

+0

Die richtigen. –

+0

Humm .... 'a' haben die 65 keycode,' d' haben die 68 keycode. Was ist das Problem genau, @TJCrowder? –

+0

@ MarcosPérezGude: Ich dachte dein Kommentar "Die richtigen" war über Tastencodes. Ich nehme an, es war nicht. :-) –