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

Fiquei uns 30min procurando o problema e ainda não achei

Ele não ta disparando o alerta de "acertou" quando clica na posição certa:

<meta charset="utf-8">
<canvas width="600" height="400"></canvas>


<script type="text/javascript">

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, 3000);


function dispara (evento){

    var x = evento.pageX - tela.offsetLeft;
    var y = evento.PageY - tela.offsetTop;

    if((x > xAleatorio - raio) 
    && (x < xAleatorio + raio) 
    && (y > yAleatorio - raio) 
    && (y < yAleatorio + raio)){

        alert("Acertou!");
    }
}

tela.onclick = dispara;

</script>

Até achei que o problema era o browser mas testei o código da transcrição e funcionou.

3 respostas

Pqp achei o erro HAHAHAHAHA

function dispara (evento){

    var x = evento.pageX - tela.offsetLeft;
    var y = evento.PageY - tela.offsetTop;

    }
}

O PageY ali com maiuscula, aqui no forum ele muda a cor mas no sublime não. Foi só postar aqui que deu pra ver fácil o problema.

Tem algum programa melhor que o Sublime pra poder visualizar de forma mais fácil as funções, loops, até onde vai um if e coisa do tipo? Se apontar uns erros de digitação como no meu caso será bem vindo tambem hahaha

solução!

Olá Alves, tudo bem ?

Eu acredito que hoje um dos melhores editores de texto é o VSCode, a maioria dos desenvolvedores vem utilizado ele e tem um suporte bem bacana para javascript

Se você fizer download dele tem uma extensão (Ctrl + Shift + x) chamada Error Lens que marca a linha de vermelho quando você comete um erro

Entretanto, para essa questão de erros de digitação vai ser dificil por uma simples razão, o fato de javascript ser tão dinâmico é complicado demais para uma extensão saber se PageY não é algo que você colocou de propósito porque existe, ou se é um erro de digitação, ele não consegue controlar muito bem, maaaas com o sistema de autocomplete dele, ficara mais fácil de ver que é pageY

Em relação a loops, if, tem a extensão Bracket Pair Colorizer 2, o que ela faz é dar cores diferentes para cada chave, parenteses, e coisas assim, então de forma visual você consegue ver que se tiver 2 loops, um vai estar com as chaves azuis, e outro roxo por exemplo

Acredito que com essas 2 extensões fica um pouco mais fácil :)

Abraços!

Com certeza vou dar uma olhada nisso, obrigado!