If I understand, you figure out how to implement the event onKeyDown
to find out the players' choice of direction.
You can do this with just one event, you just recognize whose key is. Let’s go break your work in stages, see below:
- First step set the players' keys you have already made, so let’s put the chosen keys in separate arrays:
var JogadorUmKeys=['w','d','s','a'],
JogadorDoisKeys=['ArrowUp','ArrowRight','ArrowDown','ArrowLeft'];
/// ; A posição em que as keys estão, foi para
/// ; pensa no índice deles como o relógio começando pelas 12H/0H:
/// ; INDICE/DIRECAO | POS RELOGIO | KEY
/// ; ---------------+---------------+------------
/// ; 0 | 12H | UP , W
/// ; 1 | 3H | RIGHT, D
/// ; 2 | 6H | DOWN , S
/// ; 3 | 9H | LEFT , A
- Create the direction change function (could be two functions one for the player one and the other for the player), let’s get her paid:
- Who will change direction
- The new direction
- The key that was keyed
function onJogadorMudaDirecao( jogador, direcao, key ){
console.log( 'JOGADOR:', jogador, 'DIRECAO:', direcao, 'KEY:', key );
}
- Now the purpose of the question, create the function that will handle the events, it will:
- Receive the keydown events.
- Identify if it belongs to a player
- And ignore those who belong to no one
function onKeyDown(evento){
var direcao;
/// ; `direcao` variável que vai receber o índice da
/// ; key que foi teclada.
if( ( direcao=JogadorUmKeys.indexOf(evento.key) ) != -1 ){
/// ; evento.key: a key que foi teclada
/// ; JogadorUmKeys: Array com as keys que o jogadorUm pode jogar
/// ; Array.indexOf: Função busca determinado valor na array,
/// ; retorna o índice desse valor, caso NÃO encontre retorna -1
/// ; O `if` faz o seguinte: a variavel `direcao` recebe o resultado
/// ; da busca do valor `evento.key` na array (`JogadorUmKeys.indexOf`),
/// ; por sua vez verifica se é diferente de -1, ou seja, a teclar foi
/// ; encontrada no JogadorUmKeys, isso vai fazer ele entrar no if.
onJogadorMudaDirecao( 1, direcao, evento.key );
/// ; Chama a função que muda a direção, passando como parâmetro
/// ; 1 => indicando que é o jogadorUm,
/// ; direcao => a nova direção
/// ; event.key => a key que foi teclada.
return; /// ; para a execução
}else if( (direcao=JogadorDoisKeys.indexOf(evento.key)) != -1 ){
/// ; Se a key não era do JogadorUm verifica se é do jogadorDois
/// ; O if faz a mesma coisa que o primeiro a única variável que foi
/// ; é a `JogadorDoisKeys`
/// ; JogadorDoisKeys: Array com as keys que o jogadorDois pode jogar
onJogadorMudaDirecao( 2, direcao, evento.key );
/// ; Nessa, o primeiro parâmetro vai ser
/// ; 2 => indicando que é o jogadorDois
return;
}
/// ; Se não entrar em um dois ifs a tecla apertada não pertence a nenhum jogador
/// ; então ela é invalida, você pode até colocar um console.log para ver
console.log('tecla invalida');
/// ; Aqui poderia ter mais opções Ex.: tecla P para pausar o jogo
}
See this code working below:
var JogadorUmKeys=['w','d','s','a'],
JogadorDoisKeys=['ArrowUp','ArrowRight','ArrowDown','ArrowLeft'];
function onKeyDown(evento){
var direcao;
if( (direcao=JogadorUmKeys.indexOf(evento.key)) != -1 ){
onJogadorMudaDirecao( 1, direcao, evento.key );
return;
}else if( (direcao=JogadorDoisKeys.indexOf(evento.key)) != -1 ){
onJogadorMudaDirecao( 2, direcao, evento.key );
return;
}
console.log('tecla invalida');
}
function onJogadorMudaDirecao( jogador, direcao, key ){
console.log( 'JOGADOR:', jogador, 'DIRECAO:', direcao, 'KEY:', key );
}
window.addEventListener('keydown',onKeyDown);
References:
Array.prototype.indexof(), Element.addeventlistener(), Keyboardevent(), Keyboardevent.key
I recommend reading this (in English): https://stackoverflow.com/a/12444641/825789
– bfavaretto