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

O alvo não aparece

Não consigo encontrar o problema que faz com que meu alvo não apareça. Segue meu código:

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

<script>

var tela = document.getElementById("tela");
var c = tela.getContext("2d");

c.fillStyle = 'gray';
c.fillRect (0,0,600,400);

var raio = 10;

var AlvoX;
var AlvoY;

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

function limpa() {
    c.clearRect (0, 0, 600, 400);
}

function desenhaAlvo(x,y) {
    circulo(x,y,raio+20,'red');
    circulo(x,y,raio+10,'white');
    circulo(x,y,raio,'red');
}

function sorteia(x) {
    return Math.floor(Math.random() * x);
}

function desenha() {
    limpa();
    alvoX = sorteia(600);
    alvoY = sorteia(400);
    desenhaAlvo(AlvoX, AlvoY);
}

setInterval(desenha,1000);

function atira(evento) {
    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;

    if((x > AlvoX - raio) 
        && (x < AlvoX + raio) 
        && (y > AlvoY - raio) 
        && (y < AlvoY + raio)) {

            alert('Acertou!');
    }
}

tela.onclick = atira;

</script>
5 respostas

var circulo = function (x,y,raio) "aqui faltou uma chave" { c.beginPath(); c.arc(x,y,raio,0,2*Math.PI); c.fill(); };

Obrigado pela resposta, porém eu havia consertado essa chave logo em seguida, e não é esse o problema. Vou editar o código finalizado, mas que ainda não mostra meu alvo.

solução!

Olá Kelvin,

o problema está no método desenha


function desenha() {
    limpa();
    alvoX = sorteia(600);
    alvoY = sorteia(400);
    desenhaAlvo(AlvoX, AlvoY);
}

JavaScript é case-sensitive, ou seja uma palavra começando com uma letra minusculas é considerada diferente da mesma palavra começando com letra maiúscula.

veja que você usou alvoX e alvoY para guardar os valores retornados pelo métodos sorteiaporém passou como parametro para o método desenhaAlvo as variáveis AlvoX e AlvoY, com isso seu método sempre recebe valores vazios.

Basta corrigir o nome das variáveis e seu código vai funcionar.

É, isso foi suficiente. Muito obrigado pela ajuda!

refiz aqui e funcionou

insira seu código aqui