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

alert não funciona, não consigo achar o erro.

*titulo autoexplicativo *

<canvas width="600" height="400"></canvas>

<script>
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'lightgrey';
    pincel.fillRect(0, 0, 600, 400);

    var raio = 10;
    var xAleatorio;
    var yAleatorio;

    function desenhaCirculo(x, y, raio, cor) {

        pincel.fillStyle = cor;
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2 * Math.PI);
        pincel.fill();
    }

    function limpaTela(){

        pincel.clearRect(0, 0, 600, 400);
    }

    function desenhaAlvo(x, y){

        desenhaCirculo(x, y, raio + 20, 'red');
        desenhaCirculo(x, y, raio + 10, 'white');
        desenhaCirculo(x, y, raio, 'red');

    }

    function sorteiaPosição (maximo){

        return Math.floor(Math.random() * maximo)
    }

    function atualizaTela(){

        limpaTela();
        var xAleatorio = sorteiaPosição(600);
        var yAleatorio = sorteiaPosição(400);
        desenhaAlvo(xAleatorio, yAleatorio);
    }

    setInterval(atualizaTela, 3000)

    function dispara (evento){

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        console.log(x + ", " + y)

        if((x > xAleatorio - raio) && (x < xAleatorio + raio) &&
            (y > yAleatorio - raio) && (y < yAleatorio + raio)){
            alert("Acertou!")
        }
    }

    tela.onclick = dispara;

</script>
3 respostas

Boa noite, Vagner! Como vai?

Quando o código JavaScript não funciona como esperado, é uma boa prática dar uma olhada no console do navegador. Vc verificou se lá aparece alguma mensagem de erro? Se sim, poderia colar ela aqui pra gente tentar te ajudar?

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

solução!

Olá, nesta parte do código:

    function atualizaTela(){

        limpaTela();
        var xAleatorio = sorteiaPosição(600);
        var yAleatorio = sorteiaPosição(400);
        desenhaAlvo(xAleatorio, yAleatorio);
    }

Se vc tirar os "var" antes de xAleatorio e yAleatorio o código funciona. No caso o certo seria assim:

    function atualizaTela(){

        limpaTela();
        xAleatorio = sorteiaPosição(600);
        yAleatorio = sorteiaPosição(400);
        desenhaAlvo(xAleatorio, yAleatorio);
    }

Acredito que como você declarou novamente a variável dentro da função ela ficou como uma variável local. Sem o "var", você atribuiu um valor para uma variável global.

Obrigado pela ajuda Diego. <3