2
respostas

Mudar cor: não consigo fazer mudar a cor, HELP!

Não consigo muda

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

<script>

    var cor = ['blue','red','yellow','green'];
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'grey';
    pincel.fillRect(0, 0, 600, 400);

    function desenhaCirculo(evento) {
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = cor;
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2 * 3.14);
        pincel.fill();
        console.log(x + ',' + y);
    }
    function mudaCor() {
      for(var i=0;i<cor.lenght;i++){
        cor=cor[i];
         if(i>cor.lenght){
          i=0;
         }
      }
    }
    tela.onclick = desenhaCirculo;
    tela.oncontextmenu = mudaCor();
</script>

Respondi nos comentários no código abaixo. São poucas alterações em seu código original. Copie e cole em seu editor, salve e carregue. Depois leia os comentários. E pode apagar tudo o que, em cada linha, está depois dos '//'

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

<script>

    var cor = ['blue','red','yellow','green'];
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'grey';
    pincel.fillRect(0, 0, 600, 400);
    var i = 0;                          //acrescentar declaração da variável i para ser utilizada fora da function mudaCor também

    function desenhaCirculo(evento) {
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = cor[i];      //mudar para cor[i], ao invés de tentar usar cor[i] dentro do muda cor
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2 * 3.14);
        pincel.fill();
        console.log(x + ',' + y);
    }

    function mudaCor()  {
      //for(var i = 0; i < cor.lenght; i++) {       //este 'for' conta de 0 a 3, e depois que chegar em 4, volta a zero fica em loop contando de novo.
        //cor = cor[i];     //como a variável 'cor' é do tipo array (com 4 valores neste caso), não dá pra atribuir a ela um valor apenas
        i++                 //acrescente apenas este incrementador, que vai fazer o i variar de 0 a 3. É só isto que a função precisa fazer
        if(i > cor.lenght)    {
            i = 0;
        }
      //}       tire este colchete que era do 'for'
      return false;                 //acrescentar return false para que o navegador não exiba o menu ao clicar na tela
    }

    tela.onclick = desenhaCirculo;
    tela.oncontextmenu = mudaCor;     //tirar parenteses conforme explicado no video da aula 3 atividade 1. Assim mudaCor() não é chamada ao ser lida, mas sim ao ocorrer o click.

</script>