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

Me de uma ajuda!

Na função mudaCor() tive que colocar no teste o tamanho do array - 1 se não ao realizar o ultimo clique ele retornava undefined, da forma que eu fiz funcionou perfeitamente porém não estou compreendendo o por que tive que subtrair 1 do tamanho do meu array corBolinha.length Alguem pode me explicar isso? Segue o meu codigo abaixo...

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

<script>
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'grey';
    pincel.fillRect(0, 0, 600, 400);
    var corBolinha = ["blue", "red", "green"];
    var corAtual = "blue";
    var codCorAtual = 0;

    function desenhaCirculo(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = corBolinha[codCorAtual];
        console.log(corBolinha[codCorAtual]);
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2 * 3.14);
        pincel.fill();
        console.log(x + ',' + y);
    }

    tela.onclick = desenhaCirculo;

    function mudaCor() {

        if(codCorAtual < (corBolinha.length - 1)){
            console.log(codCorAtual);
            codCorAtual++;

        }else{
            codCorAtual = 0;
        }
       return false;
    }

    tela.oncontextmenu = mudaCor;

</script>
3 respostas
solução!

Olá, Murilo, isso acontece porque o codCorAtual++; está dentro do if, mas ele precisa ficar fora, assim:

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

<script>
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'grey';
    pincel.fillRect(0, 0, 600, 400);
    var corBolinha = ["blue", "red", "green"];
    var corAtual = "blue";
    var codCorAtual = 0;

    function desenhaCirculo(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = corBolinha[codCorAtual];
        console.log(corBolinha[codCorAtual]);
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2 * 3.14);
        pincel.fill();
        console.log(x + ',' + y);
    }

    tela.onclick = desenhaCirculo;

    function mudaCor() {

        codCorAtual++;               //o incremento do contador precisa ficar fora do bloco do if

        if(codCorAtual < corBolinha.length){                    //assim, o -1 pode ser retirado da condição
            console.log(codCorAtual);


        }else{
            codCorAtual = 0;
        }
       return false;
    }

    tela.oncontextmenu = mudaCor;

</script>

Primeiro trocamos ao clicar depois ele verifica se o contador ainda é menor que o tamanho do array. Se não, ele conta um índice a mais e continua sendo vermelho.

Espero ter ajudado. Bons estudos!

Muito obrigado! entendi sim e fiz uma alteração par que fique mais limpo... agora tudo faz sentido! Vlw!

 function mudaCor() {
        codCorAtual++;
        if(codCorAtual >= corBolinha.length){
            console.log(codCorAtual);
            codCorAtual = 0;
        }
       return false;
    }

Valeu, me ajudou também!