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

Fiz o código da obras de arte, porém...

Bom dia. eu fiz o código da obra de arte, que é o último deste tópico, porém eu fiquei com uma dificuldade.

eu estava tentando fazer a colisão e na minha ideia era pegar toda a área em cinza menos área das três cores, mas toda vez que eu fazia isso, o sentido x do canvas e o sentido y do mesmo não deixava preencher.

Como eu pego toda a área excluindo a area das três cores?

Segue o trecho do código onde eu teoricamente fiz uma gambiarra em que eu não deixo o mouse preencher a região das três cores.

a função habilitarDesenho ela verifica se o mouse está na região das três cores e seleciona a troca de cor e a função e a função lidaComMovimentoDoMouse fiz um if onde que se está passando pela região, ele praticamente não faz nada.

function lidaComMovimentoDoMouse(evento) {

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

    if (x > xVermelho && x < (xVermelho + xVerde + xAzul) &&
        y > yQuadrados && y < (yQuadrados + tamanhoQuadrados)) {
        
        
    }
    else if(desenha) {
    

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

function habilitaDesenhar(evento) {

    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;
    
    if ( x > xVermelho && x < (xVermelho + tamanhoQuadrados) &&
        y > yQuadrados && y < (yQuadrados + tamanhoQuadrados)) {
        corAtual = 'red';
        
    }
    else if ( x > xVerde && x < (xVerde + tamanhoQuadrados) &&
        y > yQuadrados && y < (yQuadrados + tamanhoQuadrados)) {
            corAtual = 'green';
            
    }
    else if (x > xAzul && x < (xAzul + tamanhoQuadrados) &&
        y > yQuadrados && y < (yQuadrados + tamanhoQuadrados)) {
            corAtual = 'blue';
            
    }
    else {
        desenha = true;
    }
}

Obrigado pela Atenção.
2 respostas
solução!

Oi Fernando, tudo bem?

Parece que você está progredindo no seu projeto, e isso é ótimo! Analisando o código que você compartilhou, você está indo na direção certa, mas talvez seja necessário fazer alguns ajustes na lógica das condições para garantir que a área cinza seja preenchida corretamente.

Parece que você já está verificando se o mouse está dentro das áreas das três cores usando as coordenadas x e y. Para garantir que o preenchimento ocorra apenas na área cinza, você pode fazer o seguinte:

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

    if (x > xVermelho && x < (xVermelho + tamanhoQuadrados) &&
        y > yQuadrados && y < (yQuadrados + tamanhoQuadrados)) {
        // Se o mouse estiver na área de uma das cores, não faça nada
    } else {
        // Se o mouse estiver fora das áreas de cores, desenhe
        desenhaCirculo(x, y, 5, corAtual);
    }
}

A ideia aqui é que, se o mouse estiver dentro de qualquer uma das áreas das cores, o código simplesmente não fará nada. Isso permitirá que o desenho aconteça apenas na área cinza, que é a área que não está coberta pelas áreas das cores. Certifique-se de que a área cinza seja a área que está sobrando após a exclusão das áreas das três cores. Além disso, certifique-se de que as coordenadas xVermelho, xVerde e xAzul estejam configuradas corretamente para representar as posições das áreas das cores.

Espero que essa explicação seja útil! Se você precisar de mais ajuda ou tiver alguma dúvida adicional, fique à vontade para perguntar.

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

Oi Maria Eduarda, tudo bem?

No inicio, fiquei meio da dúvida, mas depois eu pensei em remover essa informação dessa função e passar para uma outra onde em que verifico como você disse se estou na área das três cores, se estou, então não desenho, ou seja (retorna um boleano false)ou se não estou na area das três cores, então eu desejo, ou seja (retorno um boleando true) então para desenhar eu verifico se eu desenho (true ou false) e se a aréa é desenhavél (fora da área das três cores).

Obrigado.