2
respostas

Problemas com o desenha circulo

Estou com dificuldade em entender o que eu fiz de errada o meu programa

<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 i = 0;
    var raio = 10;
    var desenha = false;

    function desenhaCirculo(evento) {
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        var cores = ['blue','red','green'];
        var cor = cores[i];
        i++;
        if(i==3)
        {
            i = 0;
        };

        if(desenha)
        {
            pincel.fillStyle = cor;
            pincel.beginPath();
            pincel.arc(x,y,raio,0,2*3.14);
            pincel.fill();
        }

        if(evento.shiftKey == true)
        {
            raio = 20
        }
        if(evento.altKey == true)
        {
            raio = 5;
        }

        console.log(x+ ', ' + y);
        console.log(cores[i]);
        console.log(i);    
    }

    tela.onmousemove = desenhaCirculo;

    function habilitaDesenho()
    {
        desenha = true;
    }
    function desabilitaDesenho()
    {
        desenha = false;
    }

    tela.onmousedown = habilitaDesenho;
    tela.onmouseup= desabilitaDesenho;

</script>

Se alguém puder me ajudar. Desde já agradeço.

2 respostas

Acho que seu código está certo! Está desenhando. A única coisa que achei estranha, foi a variação de cor (RGB), acho que ficaria melhor deixar uma cor fixa (R ou G ou B)....

Você pode testá-lo em: https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_canvas_empty

no caso, o programa era pra fazer 3 coisas:

desenhar caso o botão esquerdo estivesse pressionado(o do mouse)

quando fosse pressionado o shift, ele iria fazer um circulo com raio 20 ao invés de raio 10

quando fosse pressionado o alt, ele iria fazer um circulo com raio 5 ao invés de raio 10

só que, ele está somente desenhando, e não faz os círculos com cliques individuais