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

Não aparece o Alert

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

<script>

    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');

    pincel.fillStyle = 'lightgray';
    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 sorteiaPosicao (maximo){
      return Math.floor(Math.random()* maximo);


  }

  function atualizaTela() {
      limpaTela();
        xAleatorio = sorteiaPosicao(600);
      yAleatorio = sorteiaPosicao(400);
      desenhaAlvo(xAleatorio,yAleatorio);
  }

  setInterval(atualizaTela, 1000);

  function dispara(evento) {
      var x = evento.pageX - tela.offsetLeft;
      var y = evento.pagey - tela.offsetTop;
      alert(xAleatorio)
      alert(yAleatorio)


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

  tela.onclick = dispara;
</script>
4 respostas
solução!

Vinicius, bom dia!

Se você der um alert(y) verá que o resultado é NaN, esse significa que y não é um número.

Para que ele não seja um número a conta deve estar sendo feita errada.

 var y = evento.pagey - tela.offsetTop;

Analisando, parece estar tudo certo, porém perceba a diferença com a linha de baixo

var x = evento.pageX - tela.offsetLeft; //X maiusculo
 var y = evento.pagey - tela.offsetTop; //Y minusculo

pagey não existe, por isso retorna um NaN, esses detalhes passam despercebidos. Escreva evento.pageY e o código irá funcionar perfeitamente.

Espero ter ajudado e bons estudos!

Opa, então a verificação do seu if, eu não fiz o curso da alura, não sei oque pede o desafio,mais olhando seu código o seu if ta um pouco confuso... de uma observada.

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

no seu if, só vai mostrar o alert("acertou"); se essas condições do if forem verdadeira, você está verificando se x é maior que o resultado xAleatorio - raio logo depois verifica se é menor, e depois faz a mesma coisa com o y...

Não tem como o x ser maior e ao mesmo tempo menor que a sua verificação,no seu caso ele so vai mostrar o alert, caso todas verificação seja verdadeira.

Fala Vinícius, beleza?

Conseguiu resolver seu problema?

Como o tópico foi resolvido vou fechá-lo

:)