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

Por que meu canvas não fica lightgrey ?

<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 x = 20;
    var y = 20;

    // códigos do teclado

    var esquerda = 37;
    var cima = 38;
    var direita = 39;
    var baixo = 40;

    // taxa de incremento
    var taxa = 10;

    function desenhaCirculo(x, y, raio) {

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

    function limpaTela() {

        pincel.clearRect(0, 0, 600, 400);
    }

    function atualizaTela() {

        limpaTela();
        desenhaCirculo(x, y, 10);
    }

    setInterval(atualizaTela, 20);

    function leDoTeclado(evento) {

        if(evento.keyCode == esquerda) {
            x = x - taxa;
        }
        if(evento.keyCode == direita) {
            x = x + taxa;
        }
        if(evento.keyCode == cima) {
            y = y - taxa;
        }
        if(evento.keyCode == baixo) {
            y = y + taxa;
        }
    }

   document.onkeydown = leDoTeclado;

</script>
4 respostas

Olá Marcel,

O canvas não fica definido com a cor de fundo lightgrey porque ao executar a função limpaTela essa propriedade é removida na instrução pincel.clearRect(0, 0, 600, 400);

E por conta da execução dessa linha de código setInterval(atualizaTela, 20); a função atualizaTela é chamada e consequentemente a função limpaTela também é chamada

Para resolver essa questão basta definir a cor de fundo do canvas após a instrução pincel.clearRect(0, 0, 600, 400);

A função limpaTela ficará da seguinte forma:

function limpaTela() {

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

  }
solução!

Marcel,

O código completo será o seguinte:

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

<script>

  var tela = document.querySelector('canvas');
  var pincel = tela.getContext('2d');
  pincel.fillStyle = 'lightgrey';
  pincel.fillRect(0, 0, 600, 400);

  var x = 20;
  var y = 20;

  // códigos do teclado

  var esquerda = 37;
  var cima = 38;
  var direita = 39;
  var baixo = 40;

  // taxa de incremento
  var taxa = 10;

  function desenhaCirculo(x, y, raio) {

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

  function limpaTela() {

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

  }

  function atualizaTela() {

    limpaTela();
    desenhaCirculo(x, y, 10);
  }

  setInterval(atualizaTela, 20);

  function leDoTeclado(evento) {

    if (evento.keyCode == esquerda) {
      x = x - taxa;
    }
    if (evento.keyCode == direita) {
      x = x + taxa;
    }
    if (evento.keyCode == cima) {
      y = y - taxa;
    }
    if (evento.keyCode == baixo) {
      y = y + taxa;
    }
  }

  document.onkeydown = leDoTeclado;

</script>

Olá,

Veja o código abaixo:

    function limpaTela() {

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

    }

Assim que você limpa a tela com a linha de comando "pincel.clearRect(0, 0, 600, 400);" o fundo volta na cor padrão "branca". Agora, após limpar a tela, você pode inserir as linhas: "pincel.fillStyle = 'lightgray';" e "pincel.fillRect(0, 0, 600, 400);". Isso, faz o cor mudar e repintar o retângulo de fundo lightgray.

Espero que tenha ajudado!

Muito brigado Guilherme e muito obrigado Evandro ! Realmente foi uma dúvida muito boba. Distração minha.

Obrigado pelo suporte !