Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Por qué dibujarCirculo no utiliza la variable colorActual?

Hola, el ejercicio lo estuve haciendo de una forma más simple, tratando de modificar lo menos posible el código original, sin declarar tantas variables/funciones como en la opinion del instructor y sin importar si dibuja por encima de las 3 paleta de colores. O sea, únicamente me interesaba lo de hacer click en la paleta de colores y cambie el color. Pero noto que la variable colorActual no se utiliza, siempre es azul el círculo, por más que declare desde el inicio con var colorActual = "red". Igual el evento de hacer click en el cuadrado rojo se que funciona porque la alerta se ve.

Me inetersa saber solo eso, ya que pude hacer que funcione de la manera correcta implementando lo que estaba en la opinión del instructor en mi código y me funcionó. O sea, haciendo que dibujarCirculo reciba (x, y, colorActual) y creando una funcion capturarMovimientoDelMouse. Pero quiero saber por qué no funcionó de mi manera.

<canvas width="600" height="400"></canvas>
<script>
    var pantalla = document.querySelector('canvas');
    var pincel = pantalla.getContext('2d');
    pincel.fillStyle = 'grey';
    pincel.fillRect(0, 0, 600, 400);
    var colorActual = "red";
    var puedoDibujar = false;

    function dibujarCirculo(evento, colorActual) {

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

    function habilitarDibujar() {

        puedoDibujar = true;
    }

    function deshabilitarDibujar() {

        puedoDibujar = false;
    }

    function disparar(evento){

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

        if ((x < 50) && 
            (y < 50) ) {
           colorActual = "red";
       alert("cambio a rojo")  ///solo hice el color rojo por ahora
        }
    }

        function dibujarCuadrado(x,y,colorCuadrado){
        pincel.fillStyle = colorCuadrado;
        pincel.fillRect(x,y,50,50); 
        pincel.strokeStyle = "black";
        pincel.strokeRect(x,y,50,50);
    }

    pantalla.onmousemove = dibujarCirculo;
    pantalla.onmousedown = habilitarDibujar;
    pantalla.onmouseup = deshabilitarDibujar;
    dibujarCuadrado(0,0,"red");
    dibujarCuadrado(50,0,"green");
    dibujarCuadrado(100,0,"blue");
    pantalla.onclick = disparar;

</script>
2 respuestas

Hola amigo, espero haber entendido tu pregunta.

veo que solo se visualiza el evento cambio a rojo con alert, debido a que solo tienes declarada esa variable. por otra parte tendrias que inicializar una sola varaible que sea llamda para dicho evento al momento de dar click en cierta area del canvas, ahora veo que en tu codigo solo tienes declaradas el alert porque le estas danto esas coordenadas dentro del canvas:

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

        if ((x < 50) && 
            (y < 50) ) {
           colorActual = "red";
       alert("cambio a rojo")  ///solo hice el color rojo por ahora
        }

podrias continuar dichos alert si declaras para los otros colores las mismas coordenadas.

Saludos!

Nota: si esta respuesta te ayudo no olvides marcar como solucion! **

El alert lo utilice solo para saber que funcionaba el hacer click en ese sector de la pantalla. Lo que me interesa saber es el porqué no se utiliza colorActual en la función dibujarCirculo, ni declarando como red desde el inicio hago que dibuje circulos rojos, siempre son azul.

    function dibujarCirculo(evento, colorActual) {

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

Luego de ver la respuesta del instructor, pude hacerlo pero de otra forma:

    function dibujarCirculo(x, y, colorActual) {

        if(puedoDibujar) {

            pincel.fillStyle = colorActual;
            pincel.beginPath();
            pincel.arc(x, y, 5, 0, 2 * 3.14);
            pincel.fill();
        }
    }

        function capturarMovimientoDelMouse(evento){

        var x = evento.pageX - pantalla.offsetLeft;
        var y = evento.pageY - pantalla.offsetTop;
        dibujarCirculo(x,y,colorActual);
        }

De ésta forma si funciona colorActual en la función dibujarCirculo. Pero solo estoy haciendo un copy paste, me interesa aprender el porqué funciona si no nunca lo aprenderé.