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

[Sugerencia] Sin IF, FOR u otra cosa, solo 3 líneas de código y listo

<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 colores = ["red", "green", "blue"];
    var apuntadorColor = 0;

    function dibujarCirculo(evento){
        var x = evento.pageX - pantalla.offsetLeft;
        var y = evento.pageY - pantalla.offsetTop;    
        pincel.fillStyle = colores[apuntadorColor];
        pincel.beginPath();
        pincel.arc(x,y,10,0,2*3.14);
        pincel.fill();
        console.log(x + "," + y);        
    }

    pantalla.onclick = dibujarCirculo;

    function alterarColor() {
        apuntadorColor = (apuntadorColor + 1) % colores.length;

        return false;
    }

    pantalla.oncontextmenu = alterarColor;

</script> 

He estado viendo algunas dudas y códigos del foro y me he dado cuenta que utilizan condicionales y eso está muy bien pero yo solo agrege el array de colores, un contador y una operación matemática y todo funciona. Sé que muchos se preguntarán que pasa y aquí la explicación 1.- La función "dibujarCirculo" puede acceder al array de colores "colores" sin recibirlo como parámetro porque el array se define en el mismo ámbito (scope) global que la función.

Cuando se define un array en el ámbito global, es accesible para todas las funciones que se encuentren en ese ámbito. Por lo tanto, la función "dibujarCirculo" puede acceder al array "colores" directamente sin necesidad de recibirlo como un parámetro explícito.

En este caso, "colores" se declara como una variable global al inicio del script, lo que significa que está disponible en todo el ámbito global del script, incluyendo la función "dibujarCirculo".

2.- La lógica detrás del cambio de color del círculo es muy simple y se basa en una lista de colores predefinida que se utiliza como paleta de colores.

Cada vez que el usuario hace clic con el botón derecho del ratón en el lienzo, se activa la función "alterarColor", que aumenta el índice del apuntadorColor en uno y lo ajusta al tamaño de la lista de colores utilizando el operador módulo (%).

Después, la función "dibujarCirculo" utiliza el índice del apuntadorColor para seleccionar el siguiente color de la lista de colores, que se utiliza para establecer el color de relleno del círculo que se va a dibujar.

De esta manera, el usuario puede cambiar el color del círculo simplemente haciendo clic con el botón derecho del ratón en el lienzo, y la lista de colores predefinida garantiza que solo se utilicen los colores seleccionados y evita cualquier error de escritura en los nombres de colores.

3.- la línea de código "apuntadorColor = (apuntadorColor + 1) % colores.length;" se utiliza para cambiar de manera circular el índice del siguiente color de la lista de colores cada vez que el usuario hace clic con el botón derecho del ratón en el lienzo.

4.- la expresión "apuntadorColor = (apuntadorColor + 1) % colores.length;" ajusta el valor de "apuntadorColor" a un índice válido de la lista de colores mediante el uso del operador módulo.

3 respuestas

Gracias compañero, así queda un código mucho más simple. Se ve que usted si tiene conocimientos al respcto, yo soy principiante y creo que no pasaré del tercer curso jeje pero seguiré intentando. Suerte

llegue a la misma solución propuesta por el profesor pero tu linea de codigo me pareció útil, hasta que lo comprenda del todo lo anoto en mi ejercicio como comentario y luego cuando lo comprenda a la perfección lo usaré

Compañero muchísimas gracias, la verdad es que desconocía lo de la función del % como operador del modulo para cambiar el índice de manera circular, yo tenia un if para que reiniciara el contador a 0 y francamente tu código esta perfecto.

Se agradece mucho el aporte de tus conocimientos, que tengas un excelente día.