Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Bolinha não se mexe, apesar do código estar igual ao do instrutor. Ajuda, por favor!

Olá, Pessoal!

Tudo de boa?

Estou com um problemão com meu código: não consigo identificar onde estou errando. No console há a indicação de que o evento. keyCode não está definido. Como devo lidar com essa situação? Existe algum outro ponto incorreto no código?

Segue abaixo meu código:

<canvas width="800" height="400"></canvas>
<script>
    var tela = document.querySelector("canvas");
    var canetao = tela.getContext('2d');

    function drawCircle(x,y){
        canetao.fillStyle = 'red';
        canetao.beginPath();
        canetao.arc(x,y,15, 0,2*Math.PI);
        canetao.fill();
    }

    /* Desenha o campo para o jogo

    function drawCampo(a,b,x,y, cor){
        canetao.fillStyle = cor;
        canetao.fillRect(a,b,x,y);
    }
    canetao.fillStyle = "lightgreen";
    canetao.fillRect(0,0,800,400);
    drawCampo(20,20,760,360," white");
    drawCampo(30,30,740,340," lightgreen")
    drawCircle(400,200,25,"white");
    drawCampo(20,125,80,150, "white");
    drawCampo(780,125,-80,150, "white");
    */

    function cleanTela(){
        canetao.clearRect(0,0,800,400);
    }

    var x = 20;
    var y = 20;

    // Keys Codes
    var left = 37;
    var up = 38;
    var right = 39;
    var down = 40;

    //taxa para movimento
    var rate = 10;


    function updateCanvas() {
        cleanTela();
        drawCircle(x ,y);
    }


     // identifica o Keycode e altera a taxa para movimento
     function recKeyboard(){
         if (evento.keyCode ==left){
             x = x -rate;

         }else if( evento.keyCode == right){
             x = x + rate;

        }else if(evento.keyCode == down){
             y = y + rate;

         }else if(evento.keyCode ==up){
             y = y - rate;
         }

     }    



    setInterval(updateCanvas,20);
    document.onkeydown = recKeyboard();

</script>    

Para ser sincera não sei se o conceito do exercício ficou claro para mim. Entendo sobre o que se trata e o objetivo da lógica, mas como o valor da tecla é capturado me gerou dúvidas. Conseguem me explicar o processo de uma outra forma?

Agradeço imensamente desde já!!!

Abraço!!!

2 respostas
solução!

Ei Karol, tudo certo? :)

Então... posso tentar te explicar como o valor da tecla é capturado: cada tecla possui um código, que no caso são os que você definiu em // Key codes. Acontece que, se você der um console.log(evento), você vai ver várias propriedades desse evento, incluindo se shiftKey é igual a true or false, etc. Quando você aperta uma tecla, esse evento retorna um key code que indica qual tecla foi pressionada.

Agora vamos ao que está faltando no seu código...

Não dei uma passada na lógica do seu código, mas pude perceber que na função principal onde você grava a tecla que foi pressionada, recKeyboard(), você usa como comparação evento.keyCode, porém "evento" não está definido!!!

Lembre-se que quando você quer analisar algo do tipo, você tem que passar evento como parâmetro da função, se não a sua função não sabe o que é "evento".keyCode. Logo, use:

recKeyboard(evento){
....
}

Isso deve resolver o seu problema. Pra qualquer outra dúvida eu tô aqui! :)

Uau! Que massa! Funcionou!

Obrigada, José! =D =D