2013-08-12 12 views
5

keydown üzerinde çalışan pencereye bağlı bir etkinliğim var. Klavyede bir tuşa programatik olarak basarak rutin (aralık başına) alarak bunu test etmek isterim. Aşağıdaki kod çalışmıyor - ancak gerçekten klavyede bir tuşa basıyorsam iyi çalışıyor.Bir tuş olayını programatik olarak vanilyada tetikleme Javascript

Başlangıçta çalıştı:

İşte benim şimdiki keydown olay
var evt = document.createEvent("KeyboardEvent");  
setInterval(function() { 
    evt.initKeyEvent("keydown", true, true, window, false, false, false, false, 13, 13); 
}, 500); 

:

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

"Keydown" dinlerken "tuşa basma" olayını gönderiyorsunuz. Sorun bu olabilir mi? – zvona

+0

Olayla ilgili şu hatayı alıyorum: 'Uncaught TypeError: Nesne # 'initKeyEvent' yöntemine sahip değil - güncelleştirilmiş soru:) –

+0

initKeyEvent, bence, yalnızca Firefox. Bunu kontrol edin: http://stackoverflow.com/questions/1897333/firing-a-keyboard-event-on-chrome – zvona

cevap

1

Ben

inanıyoruz
evt.initKeyEvent(); 

aslında olmalıdır

evt.initKeyboardEvent(); 
+1

Wonderous - teşekkürler, 6 dakika içinde kabul edeceğim;) –

+1

'initKeyboardEvent 'kullanımdan kaldırıldı ve kullanımı önerilmez ([kaynak] (https://developer.mozilla.org/en-US/docs/Web/API/ KeyboardEvent/initKeyboardEvent)) –

+0

initKeyboardEvent kullanımdan kaldırıldı – AziCode

İlgili konular