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

Dúvida Atividade 10 Acertando o alvo

Olá!

Tentando fazer a lógica notei que o click não respondia ao objeto redondo. Fiz um teste deixando o raio com o mesmo tamanho do alvo maior, para testar, e o resultado foi que, esta lógica o clique é quadrado.

Até criei um quadrado com mesmo diâmetro do alvo maior no centro para verificar isso, e realmente a área do click é X, e Y, e não redondo como o alvo.

Achei que estava errando. mas ao ver o código do instrutor estava parecido.

É possível fazer com que o click respeite o arc. ?


<meta charset="utf-8">

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

<script>

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

function testAlvo() {
    pincel.fillStyle = 'gray';
    pincel.fillRect(270, 170, 60, 60);
}

pincel.fillStyle = 'lightgray';
pincel.fillRect(0, 0, 600, 400);


var raio = 10;

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

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

testAlvo(); // quadrado com diâmetro do círculo maior.

desenhaCirculo(300,200, raio + 20, 'red'); // maior círculo
desenhaCirculo(300,200, raio + 10, 'white');
desenhaCirculo(300,200, raio, 'red'); // menor circulo

function dispara(evento) {

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

    var raio = 30

    if (x >= 300 - raio && x <= 300 + raio && y >= 200 - raio && y <= 200 + raio) { // lógica de acerto

        alert("ok!");

    }
    console.log(evento);

}

tela.onclick = dispara;

</script>
4 respostas

Boa noite, Davilson! Como vai?

Eu não entendi muito bem a sua dúvida... Qual comportamento vc gostaria que seu código tivesse?

Oi Gabriel,

A atividade era fazer uma lógica para clicar no centro do alvo, e exibir um alerta, certo ?

Ai notei que o click mesmo um pouco fora do alvo dava um alerta. resolvi testar o click fazendo uma área maior para clicar.

foi observado que essa lógica não respeita o objeto redondo "alvo" no caso, se clicar fora do alvo o alerta exibia.

Sim. Isso acontece porque o teste é simples e feito por posições cartesianas x e y de valores inteiros. Se a gente ampliar a imagem do alvo, verá que ela é feita de pequenos quadrados (pixels) quem possuem valores inteiros de seu posicionamento. Acredito que para uma verificação precisa teríamos que saber todos os pontos que formam a circunferência e, o que na verdade a gente testa é uma área retangular limite. Deve haver alguma função que faça isso, mas desconheço. Desculpe.

solução!

Oi Robson F. Sena.

Entendi que era simples, eu que compliquei o negócio... rs! Muito Obrigado pela ajuda.