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

Meu código não funcionou

Pessoal, bom dia!

Pensei fazer o codigo com alguma variável de controle, mas não funcinou. Poderiam me ajudar com o motivo do erro?

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

<script>

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

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

    let x = 20;
    let direcao = 1;

    function atualizaTela() {
        if (direcao = 1) {
            limpaTela();
            desenhaCirculo(x, 20, 10);
            x++;
            if (x = 600) {
                direcao = 0;
            }
        } else if (direcao = 0) {
            limpaTela();
            desenhaCirculo(x, 20, 10);
            x--;
            if (x = 0) {
                direcao = 1;
            }
        }
    }

    setInterval(atualizaTela, 10);
</script>
2 respostas
solução!

Oi, Leonardo. No if pode usar '==' ou '===', nunca com apenas um igual (=)

Minhas sugestões:

// Opção 1
function atualizaTela() {
  if (direcao) {
    limpaTela();
    desenhaCirculo(x, 20, 10);
    x++;
    if (x > 600) direcao = 0;
  } else {
    limpaTela();
    desenhaCirculo(x, 20, 10);
    x--;
    if (x < 0) direcao = 1;
  }
}

// Opção 2
function atualizaTela() {
  limpaTela();
  desenhaCirculo(x, 20, 10);
  if (direcao) {
    x++;
    if (x > 600) direcao = 0;
  } else {
    x--;
    if (x < 0) direcao = 1;
  }
}

// Opção 3
function atualizaTela() {
    limpaTela();
    desenhaCirculo(x, 20, 10);
    x += direcao;
    if (x > 600) direcao = -1;
    if (x < 0) direção = 1;    
}

Olá Luis, boa noite!

Muito obrigado pela dica, não acredito que esqueci algo tão bobo como isso (usar == ao invés de =). Além disso, muito obrigado pelas outras opções.