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

solução do desafio

Pessoal, testei incluir mais cores para confirmar se eu entendi o que estava acontecendo no código. Só não entendi o porque da condição de não desenhar na paleta não funcionou sem os parâmetros, x e y passadas para a função.

    function naoZoaAPaleta() {

        if((x >= xVermelho)
        && (x < xPreto + tamanhoQuadrados)
        && (y >= yQuadrados) 
        && (y < tamanhoQuadrados)) {
            return false;
        }else{
            return true;
        }

segue o código completo

<meta charset="UTF-8">

<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 desenha = false;
    var corAtual = 'blue';
    var xVermelho = 125;
    var xVerde  = 175;
    var xAzul = 225;
    var xLaranja = 275;
    var xRoxo = 325;
    var xAmarelo = 375;
    var xPreto = 425;
    var yQuadrados = 0;
    var tamanhoQuadrados = 50;

    function desenhaQuadrado(x, y, tamanho, cor) {

        pincel.fillStyle = cor;
        pincel.fillRect(x, y, tamanho, tamanho)
        pincel.fill();
    }

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

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

    }

    function desenhaPaletaDeCores() {

        desenhaQuadrado(xVermelho, yQuadrados, tamanhoQuadrados, 'red');
        desenhaQuadrado(xVerde, yQuadrados, tamanhoQuadrados, 'green');
        desenhaQuadrado(xAzul, yQuadrados, tamanhoQuadrados, 'blue');
        desenhaQuadrado(xLaranja, yQuadrados, tamanhoQuadrados, 'orange');
        desenhaQuadrado(xRoxo, yQuadrados, tamanhoQuadrados, 'purple');
        desenhaQuadrado(xAmarelo, yQuadrados, tamanhoQuadrados, 'yellow');
        desenhaQuadrado(xPreto, yQuadrados, tamanhoQuadrados, 'black');

    }

    function escolheCor(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        if((x > xVermelho - tamanhoQuadrados)
        && (x < xVermelho + tamanhoQuadrados)
        && (y > yQuadrados - tamanhoQuadrados)
        && (y < yQuadrados + tamanhoQuadrados)) {

            corAtual = 'red'

        }else if((x > xVerde - tamanhoQuadrados)
        && (x < xVerde + tamanhoQuadrados)
        && (y > yQuadrados - tamanhoQuadrados)
        && (y < yQuadrados + tamanhoQuadrados)) {

            corAtual = 'green'

        }else if((x > xAzul - tamanhoQuadrados)
        && (x < xAzul + tamanhoQuadrados)
        && (y > yQuadrados - tamanhoQuadrados)
        && (y < yQuadrados + tamanhoQuadrados)) {

            corAtual = 'blue'

        }else if((x > xLaranja - tamanhoQuadrados)
        && (x < xLaranja + tamanhoQuadrados)
        && (y > yQuadrados - tamanhoQuadrados)
        && (y < yQuadrados + tamanhoQuadrados)) {

            corAtual = 'orange'

        }else if((x > xRoxo - tamanhoQuadrados)
        && (x < xRoxo + tamanhoQuadrados)
        && (y > yQuadrados - tamanhoQuadrados)
        && (y < yQuadrados + tamanhoQuadrados)) {

            corAtual = 'purple'

        }else if((x > xAmarelo - tamanhoQuadrados)
        && (x < xAmarelo + tamanhoQuadrados)
        && (y > yQuadrados - tamanhoQuadrados)
        && (y < yQuadrados + tamanhoQuadrados)) {

            corAtual = 'yellow'

        }else if((x > xPreto - tamanhoQuadrados)
        && (x < xPreto + tamanhoQuadrados)
        && (y > yQuadrados - tamanhoQuadrados)
        && (y < yQuadrados + tamanhoQuadrados)) {

            corAtual = 'black'

        }
   }

    function naoZoaAPaleta(x, y) {

        if((x >= xVermelho)
        && (x < xPreto + tamanhoQuadrados)
        && (y >= yQuadrados) 
        && (y < tamanhoQuadrados)) {
            return false;
        }else{
            return true;
        }

    } 

    function lidaComMovimentoDoMouse(evento) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        if(desenha && naoZoaAPaleta(x, y)) {

            desenhaCirculo(x, y, 5, corAtual);
        }
    }

    function habilitaDesenhar() {

        desenha = true;
    }

    function desabilitaDesenhar() {

        desenha = false;
    }

    desenhaPaletaDeCores(); // mostra os quadrados de seleção de cores

    tela.onclick = escolheCor;

    tela.onmousemove = naoZoaAPaleta;

    tela.onmousemove = lidaComMovimentoDoMouse;

    tela.onmousedown = habilitaDesenhar;

    tela.onmouseup = desabilitaDesenhar;

</script>
2 respostas
solução!

Oi, Fernando, tudo bem?

Agradeço por aguardar um retorno nosso.

Ao definir o parâmetro de uma função, passamos para ela as informações necessárias para que ela funcione, nesse caso, por se tratar de uma função que precisa saber onde na tela podemos ou não desenhar, precisamos da posição horizontal e vertical da tela, ou seja, as coordenadas xe y.

recorte de imagem do plano cartesiano mostrando as coordenadas x e y.

Usamos os parâmetros x e y para que ela compreenda a área de atuação que estamos nos referindo, quando não passamos esses valores como parâmetros deixamos a nossa função sem a noção da área de atuação, logo, sem saber exatamente quais pontos podemos desenhar.

Espero ter ajudado! Qualquer dúvida estarei à disposição.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Olá, Nathalia.

Obrigado pela explicação.