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

Dúvida no Ex. 1 da Aula 5 - Desafio Final

Pessoal, não é bem uma dúvida no Exercício é só uma complementação, eu queria que a tela ficasse marcada com uma caixa preta, eu adicionando o código

c.strokeStyle="black"; c.strokeRect(0,0,600,400); embaixo da var c = tela.getContext("2d");

funciona no começo porém depois que o alvo começa a aparecer a caixa preta some, poderiam me essa força? o meu código completo é esse embaixo,

<h1>Acerte o ALVO</h1>

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

<script>

    var tela=document.getElementById("tela");
    var c = tela.getContext("2d");
    c.strokeStyle="black";
    c.strokeRect(0,0,600,400);

var raio = 10
var alvoX;
var alvoY;

var desenhaAlvo = function(x, y) {
    circulo(x,y, raio +30, "white");
    circulo(x,y, raio +20, "red"); 
    circulo(x,y, raio +10, "white");
    circulo(x,y, raio, "red");   

};

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

var limpa = function() {
    c.clearRect(0,0,600,400);
}
var sorteia = function(max){
    return Math.floor(Math.random()*max);
}


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



setInterval(desenha, 1000);

tela.onclick = function(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("Boa! bem no alvo!");
    }
else{
alert("você errou, tente de novo! ")
}
}
</script>
3 respostas
solução!

Olá Greison! A caixa preta some pois perceba que você está utilizando a função setInterval(desenha, 1000); para sempre desenhar o alvo chamando a função desenha(). No entanto, perceba que dentro da função desenha()é chamada a função limpa() que limpa sempre o retangulo, por isso inicialmente aparece a caixa mas após ser chamado o limpa() ela some.

Para resolver o problema, basta adicionar à função limpa(), para desenhar a caixa novamente após limpar retângulo, ficando assim:

var limpa = function() {
    c.clearRect(0,0,600,400);
    c.strokeStyle="black";
    c.strokeRect(0,0,600,400);
}

Enfim, espero ter ajudado! Bons Estudos!

Olá Romário, funcionou para o que eu queria!, Obrigado.

Por nada Greison! Estamos aqui para ajudar. Bons Estudos!