Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
8
respuestas

Problema con la delimitación del área de mi código

Hola alguien me ayuda con mi código del programa para dibujar con la paleta de colores, lo único que me falta es bloquear la zona de la paleta para que no se pueda dibujar sobre ella, lo he conseguido a medias, lo único que se me ocurrió fue usar un if (y>58) para que solo se pueda dibujar desde la coordenada y=58 en adelante, lo cual no es ideal, porque entiendo que quieren que también se pueda dibujar en el espacio al lado de la paleta de colores, si alguien me ayuda, se lo agradecería, la verdad es el que el código del profe no lo entiendo mucho, sobre todo la parte de delimitar el área.

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

<script>
    var pantalla = document.querySelector('canvas');
    var pincel = pantalla.getContext('2d');

    pincel.fillStyle = 'lightgrey';
    pincel.fillRect(0, 0, 600, 400);

    pincel.fillStyle = 'red';
    pincel.fillRect(0, 0, 50, 50);
    pincel.strokeStyle = "black";// es el color del borde, una propiedad
    pincel.strokeRect(0, 0,50,50); //las 2 primeras coordenadas son la posición inicial y las ultimas 2 son el tamaño de la figura

    pincel.fillStyle = 'green';
    pincel.fillRect(50, 0, 50, 50);
    pincel.strokeStyle = "black";// es el color del borde, una propiedad
    pincel.strokeRect(50, 0,50,50); //las 2 primeras coordenadas son la posición inicial y las ultimas 2 son el tamaño de la figura

    pincel.fillStyle = 'blue';
    pincel.fillRect(100, 0, 50, 50);
    pincel.strokeStyle = "black";// es el color del borde, una propiedad
    pincel.strokeRect(100, 0,50,50); //las 2 primeras coordenadas son la posición inicial y las ultimas 2 son el tamaño de la figura

    var puedoDibujar = false;
    var color = "blue"

    function cambiarColor(evento){

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

        if((x < 50) &&
           (x > 0) &&
           (y < 50) &&
           (y > 0)) {

            color = "red";
        } 

        if((x < 100) &&
           (x > 50) &&
           (y < 50) &&
           (y > 0)) {

            color = "green";
        }

        if((x < 150) &&
           (x > 100) &&
           (y < 50) &&
           (y > 0)) {

            color = "blue";
        }  


    }

    pantalla.onclick = cambiarColor

    function dibujarCirculo(evento) {

        if(puedoDibujar) {
            var x = evento.pageX - pantalla.offsetLeft;
            var y = evento.pageY - pantalla.offsetTop;

            if((y>58)){
            pincel.fillStyle = color;
            pincel.beginPath();
            pincel.arc(x, y, 5, 0, 2 * 3.14);
            pincel.fill();
        }
        }

    }

    pantalla.onmousemove = dibujarCirculo;

    function habilitarDibujar() {

        puedoDibujar = true;
    }

    function deshabilitarDibujar() {

        puedoDibujar = false;
    }

    pantalla.onmousedown = habilitarDibujar;

    pantalla.onmouseup = deshabilitarDibujar;

</script>

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

8 respuestas

Buenas, una solución rápida que podrías aplicar es que si se encuentra en la zona de la selección de colores no pueda dibujar, caso contrario que pueda:

...
    if (x < 160 && y < 60) {
        deshabilitarDibujar()
    } else {
        pincel.fillStyle = color;
        pincel.beginPath();
        pincel.arc(x, y, 5, 0, 2 * 3.14);
        pincel.fill();
    }
...

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Espero haber sido de ayuda, de ser así no olvides marcar como solucionado. Saludos :)

Hola, puedes mandarme el código completo con la corrección para ubicarme mejor ?, es que ando desorientado, porque estoy pegando la solución que me diste en la función de dibujar.Circulo(evento), pero no me funciona

solución!

Buenas, claro, te dejo el código completo, simplemente cambié la condición que tenías dentro de la función dibujarCirculo

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

<script>
var pantalla = document.querySelector('canvas');
var pincel = pantalla.getContext('2d');

pincel.fillStyle = 'lightgrey';
pincel.fillRect(0, 0, 600, 400);

pincel.fillStyle = 'red';
pincel.fillRect(0, 0, 50, 50);
pincel.strokeStyle = "black";// es el color del borde, una propiedad
pincel.strokeRect(0, 0, 50, 50); //las 2 primeras coordenadas son la posición inicial y las ultimas 2 son el tamaño de la figura

pincel.fillStyle = 'green';
pincel.fillRect(50, 0, 50, 50);
pincel.strokeStyle = "black";// es el color del borde, una propiedad
pincel.strokeRect(50, 0, 50, 50); //las 2 primeras coordenadas son la posición inicial y las ultimas 2 son el tamaño de la figura

pincel.fillStyle = 'blue';
pincel.fillRect(100, 0, 50, 50);
pincel.strokeStyle = "black";// es el color del borde, una propiedad
pincel.strokeRect(100, 0, 50, 50); //las 2 primeras coordenadas son la posición inicial y las ultimas 2 son el tamaño de la figura

var puedoDibujar = false;
var color = "blue"

function cambiarColor(evento) {

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

    if ((x < 50) &&
        (x > 0) &&
        (y < 50) &&
        (y > 0)) {

        color = "red";
    }

    if ((x < 100) &&
        (x > 50) &&
        (y < 50) &&
        (y > 0)) {

        color = "green";
    }

    if ((x < 150) &&
        (x > 100) &&
        (y < 50) &&
        (y > 0)) {

        color = "blue";
    }
}

pantalla.onclick = cambiarColor

function dibujarCirculo(evento) {

    if (puedoDibujar) {
        var x = evento.pageX - pantalla.offsetLeft;
        var y = evento.pageY - pantalla.offsetTop;

        if (x < 160 && y < 60) {
            deshabilitarDibujar()
        } else {
            pincel.fillStyle = color;
            pincel.beginPath();
            pincel.arc(x, y, 5, 0, 2 * 3.14);
            pincel.fill();
        }
    }

}

pantalla.onmousemove = dibujarCirculo;

function habilitarDibujar() {

    puedoDibujar = true;
}

function deshabilitarDibujar() {

    puedoDibujar = false;
}

pantalla.onmousedown = habilitarDibujar;

pantalla.onmouseup = deshabilitarDibujar;
</script>

ME AYUDARON MUCHISIMO, Yo tenia problema al hacer la funcion para cambiar de colores.

Vale, ya veo, no se me ocurrió eso de volver a llamar a la función deshabilitar, gracias amigo.

Yo lo hice de otra manera, usando mi propia lógica y lo logré, luego le agregué algunas cosas adicionales.

Por si les interesa, aquí les pongo código del mío, que tiene la opción de "Borrador" para borrar los círculos ya dibujados y un botón de "Limpiar Pantalla".

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Y aquí el código:

<script>
    var pantalla = document.querySelector('canvas');
    var pincel = pantalla.getContext('2d');

    function dibujarPantalla() {
        pincel.clearRect(0, 0, 600, 400);
        pincel.fillStyle = "lightgray";
        pincel.fillRect(0, 0, 600, 400);
        pincel.strokeStyle = "black";
        pincel.strokeRect(0, 0, 600, 400);
        pincel.fillStyle = "red";
        pincel.fillRect(0, 0, 50, 50);
        pincel.strokeStyle = "white";
        pincel.strokeRect(0, 0, 50, 50);
        pincel.fillStyle = "green";
        pincel.fillRect(50, 0, 50, 50);
        pincel.strokeStyle = "white";
        pincel.strokeRect(50, 0, 50, 50);
        pincel.fillStyle = "blue";
        pincel.fillRect(100, 0, 50, 50);
        pincel.strokeStyle = "white";
        pincel.strokeRect(100, 0, 50, 50);
        pincel.fillStyle = "black";
        pincel.fillRect(450, 0, 150, 50);
        pincel.font = "18px Georgia";
        pincel.fillStyle = "white";
        pincel.fillText("Limpiar Pantalla.", 456, 30);
        pincel.fillStyle = "white";
        pincel.fillRect(150, 0, 90, 50);
        pincel.strokeStyle = "black"
        pincel.strokeRect(150, 0, 90, 50);
        pincel.font = "18px Georgia";
        pincel.fillStyle = "black";
        pincel.fillText("Borrador.", 155, 30);
    }

    dibujarPantalla();

    var color = ["red", "green", "blue", "lightgray"];
    var colorActual = 2;
    var puedoDibujar = false;

    function dibujarCirculo(evento) {
        if (puedoDibujar) {
            var x = evento.pageX - pantalla.offsetLeft;
            var y = evento.pageY - pantalla.offsetTop;
            pincel.fillStyle = color[colorActual];
            pincel.beginPath();
            pincel.arc(x, y, 5, 0, 2 * 3.14);
            pincel.fill();
            pincel.strokeStyle = "black";
            pincel.strokeRect(0, 0, 600, 400);
            pincel.fillStyle = "red";
            pincel.fillRect(0, 0, 50, 50);
            pincel.strokeStyle = "white";
            pincel.strokeRect(0, 0, 50, 50);
            pincel.fillStyle = "green";
            pincel.fillRect(50, 0, 50, 50);
            pincel.strokeStyle = "white";
            pincel.strokeRect(50, 0, 50, 50);
            pincel.fillStyle = "blue";
            pincel.fillRect(100, 0, 50, 50);
            pincel.strokeStyle = "white";
            pincel.strokeRect(100, 0, 50, 50);
            pincel.fillStyle = "black";
            pincel.fillRect(450, 0, 150, 50);
            pincel.font = "18px Georgia";
            pincel.fillStyle = "white";
            pincel.fillText("Limpiar Pantalla.", 456, 30);
            pincel.fillStyle = "white";
            pincel.fillRect(150, 0, 90, 50);
            pincel.strokeStyle = "black"
            pincel.strokeRect(150, 0, 90, 50);
            pincel.font = "18px Georgia";
            pincel.fillStyle = "black";
            pincel.fillText("Borrador.", 155, 30);
        }
    }

    function borrador(evento) {
       var x = evento.pageX - pantalla.offsetLeft;
        var y = evento.pageY - pantalla.offsetTop;
        pincel.fillStyle = "lightgrey";
        pincel.beginPath();
        pincel.arc(x, y, 5, 0, 2 * 3.14);
        pincel.fill();
    }

    pantalla.onclick = cambiarColor;
    pantalla.onmousemove = dibujarCirculo;
     function habilitarDibujar() {
        puedoDibujar = true;
    }

    function deshabilitarDibujar() {
        puedoDibujar = false;
    }

    pantalla.onmousedown = habilitarDibujar;
    pantalla.onmouseup = deshabilitarDibujar;

    function cambiarColor(evento) {
        var x = evento.pageX - pantalla.offsetLeft;
        var y = evento.pageY - pantalla.offsetTop;
        pincel.fillStyle = color[colorActual];

        pantalla.onmouseup = deshabilitarDibujar;

        if ((x <= 50) && (y <= 50)) {
            colorActual = 0;
        } else if ((x > 50) && (x <= 100) && (y <= 50)) {
            colorActual = 1;
        } else if ((x > 100) && (x <= 150) && (y <= 50)) {
            colorActual = 2;
        } else if ((x >= 150) && (x <= 240) && (y <= 50)) {
            colorActual = 3;
        } else if ((x >= 450) && (x <= 600) && (y <= 50)) {
            dibujarPantalla();
        }
        return false;
    }

    if ((x > 100) && (x <= 150) && (y <= 50) && (x >= 450) && (x <= 600)) {
        var x = evento.pageX - pantalla.offsetLeft;
        var y = evento.pageY - pantalla.offsetTop;
        pantalla.onmousedown = deshabilitarDibujar;
        pantalla.onmouseup = deshabilitarDibujar;
        cambiarColor;
    }

</script>

Yo dejaría tu condicional así. Donde 3 es el número de paletas y 50 es el tamaño cada una.

if (y > 58 || x > (3 * 50)) {
      pincel.fillStyle = color; 
      pincel.beginPath();
      pincel.arc(x, y, 5, 0, 2 * 3.14);
      pincel.fill();
    }

Si deseas añadir más paletas y tener un mismo tamaño para todas lo correcto sería definir las paletas en un arreglo y el tamaño en una variable.