Mam zdarzenie związane z oknem działającym pod numerem keydown
. Chciałbym to przetestować, wykonując procedurę (w odstępach) programowo uderzającą w klawisz na klawiaturze. Poniższy kod nie działa - ale działa dobrze, jeśli faktycznie naciskasz klawisz na klawiaturze.Wywoływanie zdarzeń kluczowych zdarzeń programowo w wanilii JavaScript
początkowo próbowałem:
var evt = document.createEvent("KeyboardEvent");
setInterval(function() {
evt.initKeyEvent("keydown", true, true, window, false, false, false, false, 13, 13);
}, 500);
Oto mój obecny keydown
wydarzenie:
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!");
}
}
});
Wysyłasz zdarzenie "keypress" podczas słuchania "keydown". Czy to może być problem? – zvona
Otrzymuję następujący błąd w przypadku każdego zdarzenia: 'Uncaught TypeError: Object # nie ma metody 'initKeyEvent'' - zaktualizowane pytanie:) –
initKeyEvent jest, jak sądzę, tylko Firefox. Sprawdź to: http://stackoverflow.com/questions/1897333/firing-a-keyboard-event-on-chrome – zvona