1
resposta

[Dúvida] Não entendi a lógica do disparando contra o alvo

Segue ó código:

<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;

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

            alert('Acertou!');

        }


    }

    tela.onclick = dispara;

</script>

A parte em que não entendi, é if((x > xAleatorio - raio) && (x < xAleatorio + raio) && (y > yAleatorio - raio) && (y < yAleatorio + raio)) {

É correto dizer que o +/- raio, é os pixels que você vai considerar que acertou? Ou seja, x < xAleatorio + raio, significa que esse "+ raio", que é igual a 10, vai somar 10 pixel, e nesse raio que eu clicar, vai dar que eu acertei, correto? Segue a imagem demonstrativa: (https://cdn1.gnarususercontent.com.br/1/1805812/ce826705-f47e-4d38-820d-feab7a62459e.png)

1 resposta

Olá, Guilherme! Como vai?

Peço perdão pela demora em obter um retorno.

Na parte do código que você mencionou, o +/- raio é usado para definir uma região em torno do ponto central do alvo onde o clique será considerado um acerto.

No caso do trecho (x > xAleatorio - raio) && (x < xAleatorio + raio) && (y > yAleatorio - raio) && (y < yAleatorio + raio), ele está verificando se as coordenadas do clique (x, y) estão dentro dessa região.

Se você considerar o exemplo da imagem que você compartilhou, onde o raio é 10 pixels, a região de acerto será um quadrado de lado 20 pixels (10 pixels para cada lado do ponto central do alvo). Ou seja, se você clicar dentro desse quadrado, o código irá considerar que você acertou o alvo.

Espero ter esclarecido sua dúvida!

Fico à disposição. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!