Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] A tela com fundo cinza fica branca quando executa , o alvo aparece

Pessoal, no exercio do professor a tela fica cinza e o alvo tem o limite, no gabarito a tela fica branca e o alvo passa os limites, esse é o gabarito. Não entendi porque muda quando executa.

O fato do alvo aparecer cortado as vezes é porque o limite foi baseano no circulo do meio por isso, é ele que bate nas bordas, deixando o circulo maior aparecer parcialmente.

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

    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();
    var xAleatorio = sorteiaPosicao(600);
    var yAleatorio = sorteiaPosicao(400);
    desenhaAlvo(xAleatorio, yAleatorio);
    }

    setInterval(atualizaTela, 1000);

</script>
1 resposta
solução!

Olá Dev, tudo bem? Espero que sim.

Ótima pergunta!

O limite que definimos para a tela onde o código atuará é definido no começo do código:

//Tela de largura 600 e altura 400
<canvas width="600" height="400"></canvas>

O instrutor no começo pinta toda essa área limite usando a cor cinza:

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

Porém, posteriormente declaramos uma função que limpa a tela para criar a sensação de que os alvos estão aparecendo e desaparecendo. Com a limpeza da tela, a cor da tela também é apagada, sendo assim, o cinza se perde e a tela fica branca, mas os limites de 600x400 permanecem os mesmos.

//Função que limpa a tela
function limpaTela() {
    pincel.clearRect(0, 0, 600, 400);

}
//Função que limpa a tela e torna aleatória a posição dos alvos desenhados
function atualizaTela() {
    limpaTela();
    var xAleatorio = sorteiaPosicao(600);
    var yAleatorio = sorteiaPosicao(400);
    desenhaAlvo(xAleatorio, yAleatorio);
}

Sendo assim, com a limpeza da tela a cor juntamente com os alvos são apagados para que sejam gerados novos alvos, esses alvos continuam sendo cortados por conta do limite da tela permanecer o mesmo.

Se precisar de ajuda estamos à disposição, conte conosco.

Um bom dia e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software