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

Mudança de cor da Bolinha no clique (Logica de Programação II (Topico 3.4)

Olá, poderia me ajudar com esse código? Fiz a função para mudar a cor da bolinha ao clicar, mas não funciona. Quando eu defino na função "desenhaCirculo" que a cor da bola será verde por exemplo, ela funciona.

<meta charset="UTF-8">
<canvas width="600" height="400"></canvas>

<script>

    function desenhaCirculo(evento)                              // parametro (evento) da funcao (que o navegador tem e carrega as informaçoes do clique) para aparecer a posicao do clique
    {

        var x = evento.pageX - tela.offsetLeft;                   // posicao do eixo X
        var y = evento.pageY - tela.offsetTop;                      // posicao do eixo y
        corBola = cores[x];

        pincel.fillStyle = corBola;
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2 * 3.14);                        // cria um circulo aonde clica
        pincel.fill();
        console.log(x + ',' + y);                                // mostra a posicao x e y pelo console

    }

    function mudaCor()                                 // altera o indice que sera usado para indicar a posicao do array
    {
        x++;
        if (x >= 3)                                                 // caso ele seja maior q o numero de elementos do array, volta o indice volta a ser igual a 0
        {
            x = 0;
        }
        return false;
    }

    var tela, pincel, x, cores;   
    tela = document.querySelector("canvas");                                                            // tras o canvas para o mundo js
    pincel = tela.getContext("2d");                                                                                // pincel sera em 2d
    pincel.fillStyle = "lightgrey";                                                                                    
    pincel.fillRect(0, 0, 600, 400);
    cores = ["blue", "red", "green"];
    x = 0;

    tela.onclick = desenhaCirculo;                                        // desenha um circulo em cada clique
    tela.oncontextmenu = mudaCor;                                        // em cada clique com botao direito, ele muda o indice do array que esta relacionado a uma cor.



</script>
3 respostas

Olá, Luan, posta o código aqui pra gente ver... Clique no botão </> e cole o código entre os dois grupos de risquinhos que irá aparecer.

Desculpe, eu havia esquecido !

solução!

Olá, Luan, o problema era que você tinha duas variáveis x distintas declaradas com mesmo nome (no início, já temos uma declaração de var x = evento.pageX - tela.offsetLeft; ). Então, em uma delas substituí "x = 0" por "cor = 0", aí funcionou:

<meta charset="UTF-8">
<canvas width="600" height="400"></canvas>

<script>

    function desenhaCirculo(evento) {

        var x = evento.pageX - tela.offsetLeft;                   
        var y = evento.pageY - tela.offsetTop;                  
        corBola = cores[cor];

        pincel.fillStyle = corBola;
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2 * 3.14);
        pincel.fill();
        console.log(x + ',' + y);                         
    }

    function mudaCor() {
        cor++;
        if (cor == 3)                                             
        {
            cor = 0;
        }
        return false;
    }

    var tela, pincel, x, cores;   
    tela = document.querySelector("canvas");                                                       
    pincel = tela.getContext("2d");                                                                         
    pincel.fillStyle = "lightgrey";                                                                                    
    pincel.fillRect(0, 0, 600, 400);
    cores = ["blue", "red", "green"];
    cor = 0;

    tela.onclick = desenhaCirculo;                                        
    tela.oncontextmenu = mudaCor;                                        

</script>

Outra coisa é que mudei o "if" para " if (cor == 3)" porque se não ele repete o verde antes de mudar, já que o array vai até o índice 2 (0=blue, 1=red, 2=green, lembra?).

Espero ter ajudado. Bons estudos!