2013-08-12 11 views
5

Ho un evento collegato alla finestra in esecuzione su keydown. Vorrei testare questo avendo una routine (per intervallo) che colpisce programmaticamente un tasto sulla tastiera. Il seguente codice non funziona, ma funziona bene se in realtà sto premendo un tasto sulla tastiera.Attivazione di un evento keydown a livello di programmazione in vaniglia Javascript

ho inizialmente provato:

var evt = document.createEvent("KeyboardEvent");  
setInterval(function() { 
    evt.initKeyEvent("keydown", true, true, window, false, false, false, false, 13, 13); 
}, 500); 

Ecco la mia attuale keydown evento:

window.addEventListener('keydown', function(k) { 
    switch(k.keyCode) { 
     case 38: //up 
      if (Game.Area[Game.Player.x][Game.Player.y-1].type !== 0 && Game.Player.y > 0) { 
       Game.Player.y--; 
      } 
      Game.Player.d = 0; 
      break; 
     case 40: //down 
      if (Game.Area[Game.Player.x][Game.Player.y+1].type !== 0 && Game.Player.y < Game.Area[0].length-1) { 
       Game.Player.y++; 
      } 
      Game.Player.d = 1; 
      break; 
     case 37: //left 
      if (Game.Area[Game.Player.x-1][Game.Player.y].type !== 0 && Game.Player.x > 0) { 
       Game.Player.x--; 
      } 
      Game.Player.d = 2; 
      break; 
     case 39: //right 
      if (Game.Area[Game.Player.x+1][Game.Player.y].type !== 0 && Game.Player.y < Game.Area.length-1) { 
       Game.Player.x++; 
      } 
      Game.Player.d = 3; 
      break; 
     case 66: 
      if (Game.Player.d === 0 && Game.Player.y > 0) { //up 
       Game.Area[Game.Player.x][Game.Player.y-1].type = 60; 
      } else if (Game.Player.d === 1 && Game.Player.y < Game.Area.length) { //down 
       Game.Area[Game.Player.x][Game.Player.y+1].type = 60; 
      } else if (Game.Player.d === 2 && Game.Player.x > 0) { //left 
       Game.Area[Game.Player.x-1][Game.Player.y].type = 60; 
      } else if (Game.Player.d === 3 && Game.Player.x < Game.Area.length) { //right 
       Game.Area[Game.Player.x+1][Game.Player.y].type = 60; 
      } 
      break; 
     default: 
      break; 
    } 
    Game.MoveZeds(); 

    for (var z = 0; z < Game.Zeds.length; z++) { 
     if (Game.Player.x === Game.Zeds[z].x && Game.Player.y === Game.Zeds[z].y) { 
      alert("Ouch!"); 
     } 
    } 
}); 
+0

Stai inviando l'evento "keypress" mentre stai ascoltando "keydown". Potrebbe essere questo il problema? – zvona

+0

Viene visualizzato il seguente errore in entrambi gli eventi: 'Uncaught TypeError: Object # non ha metodo 'initKeyEvent'' - domanda aggiornata:) –

+0

initKeyEvent è, penso, solo Firefox. Dai un'occhiata a questo: http://stackoverflow.com/questions/1897333/firing-a-keykey-event-on-chrome – zvona

risposta

1

Credo

evt.initKeyEvent(); 

dovrebbe in realtà essere

evt.initKeyboardEvent(); 
+1

Meraviglioso - grazie, accetterò in 6 minuti;) –

+1

'initKeyboardEvent' è deprecato e il suo utilizzo è sconsigliato ([fonte] (https://developer.mozilla.org/en-US/docs/Web/API/ KeyboardEvent/initKeyboardEvent)) –

+0

initKeyboardEvent è obsoleto – AziCode

Problemi correlati