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

Tentando fazer o circulo mudar de cor

Boa tarde! Eu tentei fazer que o circulo trocasse de cor, tentei da seguinte maneira:

<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 cores = ["blue", "red", "green"]
    var i = 0;

    function desenhaCirculo(x, y, raio, cores) {

        pincel.fillStyle = cores[i];
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2 * Math.PI);
        pincel.fill();
    }

    function limpaTela() {

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

    }

    function mudaCor () {

        if (i == 2) {

            i = 0;

        } else {

            i++;

        }

    }

    var raio = 20;
    var alteraRaio = 1;

    function pulsaCirculo () {

        limpaTela();

    if (raio > 30) {

        alteraRaio = -1;

    } if (raio < 20) {

        alteraRaio = 1;

  }


    desenhaCirculo(300, 200, raio, cores[i]);
    raio = raio + alteraRaio;
    mudaCor ();

    console.log(i);
    console.log(raio);

    }

    setInterval(pulsaCirculo, 20);

</script>

O circulo ficou na cor cinza, alguém poderia me explicar porque não deu certo? Desde já, muito obrigado.

1 resposta
solução!

Eu não sei bem qual a sua intenção de mudar de cor, mas aqui ele ficou piscando em várias cores rapidamente.

Se for isso, o erro está aqui:

function desenhaCirculo(x, y, raio, cores) {

        pincel.fillStyle = cores[i];
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2 * Math.PI);
        pincel.fill();
}

Você não pode utilizar do parâmetro [i] dentro desta função, pois a simples variável 'cores' já virá na cor correta, afinal você já utilizou do parâmetro [i] quando você chamou a função.

desenhaCirculo(300, 200, raio, cores[i]);

Ficando assim:

function desenhaCirculo(x, y, raio, cores) {

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