Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Ejercicio resuelto y duda

Resolvi el ejercicio sin ver el codigo del Asesor hasta terminar y llegamos a conclusiones diferentes, espero no estar errado por la manera en que lo hice.

.mi duda es si hay alguna manera de evitar que al mover el cursor muy rapido aparezcan los circulos tan separados.

Ejercicio

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

<!- Decidi aumetar tamaño de canvas para poder tener la barra de colores arriba
y permitir dibujar en el lienzo completo de 600 x 400->

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

    //dibujo rectangulo de 600 X 400 para definir area para poder dibujar 
    pincel.fillStyle = 'black';
    pincel.strokeRect(0, 50, 600, 400)

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

    function paletaColores(){
        var ejeX=0;
        for(var i = 0; i< color.length;i++){
            pincel.fillStyle = color[i];
            pincel.fillRect(ejeX, 0, 50, 50);
            ejeX+=50;
        }
    }

    function cambioColor(eventoClick){

        var clickX = eventoClick.pageX - pantalla.offsetLeft;
        var clickY = eventoClick.pageY - pantalla.offsetTop;

        if(clickX<=50 && clickY<50){
            colorElegido = 0;
        }
        else if(clickX<=100 && clickY<50){
            colorElegido = 1;
        }else if(clickX<=150 && clickY<50){
            colorElegido = 2;
        }

    }

    function dibujarCirculo(evento) {
            // se añade condicional al if para no permitir escribir en la parte superior del canvas 
            //tambien en el evento PageY a parte de restar offset tambien reste radio de circulo 
            //para que no pase del marco dibujado

        if(puedoDibujar && evento.pageY - pantalla.offsetTop - 5 > 50) {
            var x = evento.pageX - pantalla.offsetLeft;
            var y = evento.pageY - pantalla.offsetTop;
            pincel.fillStyle = color[colorElegido];
            pincel.beginPath();
            pincel.arc(x, y, 5, 0, 2 * 3.14);
            pincel.fill();
        }

    }
    paletaColores();
    pantalla.onmousemove = dibujarCirculo;

    function habilitarDibujar() {

        puedoDibujar = true;
    }

    function deshabilitarDibujar() {

        puedoDibujar = false;
    }

    pantalla.onmousedown = habilitarDibujar;

    pantalla.onmouseup = deshabilitarDibujar;

    pantalla.onclick = cambioColor;

</script>

Resultado

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

1 respuesta

¡Hola Jaime!

Es genial que hayas resuelto el ejercicio por tu cuenta y hayas llegado a una solución diferente. En cuanto a tu duda, una forma de evitar que los círculos se dibujen tan separados al mover el cursor rápidamente es aumentar la frecuencia de muestreo, es decir, la cantidad de veces que se toma la posición del cursor por segundo. Pero esto algo que se requiere de más complejidad en el proyecto y no es lo indicado para ahora, pero si deseas intentarlo, puedes buscar algunos ejemplos en google, que te darán un punto de partida.

Si te quedó alguna duda no dejes de preguntar, estamos aqui para ayudarte.

¡Saludos!

Si este post te ayudó, por favor marca como solucionado ✓. ¡Continúa con tus estudios!