Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

Cambiando el color con For.

Buenas chicos, alguno intentó hacer el ejercicio con For? Yo lo hice asi:

<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); 



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

        pincel.beginPath();
        pincel.arc(x,y,10,0,2*3.14);
        pincel.fill();
        console.log(x + "," + y);        
    }

    pantalla.onclick = dibujarCirculo;

    var colores = ["blue", "red", "green"];
    var colorActual = 0; 

 function circulosColoridos() {

     for(var colorActual = 0; colorActual <= colores.length; colorActual++) {

        pincel.fillStyle = colores[colorActual];

        if(colorActual >= colores.length) {

           colorActual = 0;

           break; 

         } else{

           colorActual++;

           break; 

           }
    }

     return false;
}

pantalla.oncontextmenu = circulosColoridos;

</script>

Dentro de todo me sale bien, sin embargo, el problema es que el for no itera el array Colores y por lo tanto, al hacer click en boton derecho, se queda en el azul. He visto que lo hicieron con el if y el while, pero me gustaria saber si se puede implementar con el For. Saludos!!

3 respuestas

Hola María, yo también lo planteé con un for! y me funcionó todo bien, acá te dejo mi código:

<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 color = ["blue","red","green"]; //Array con los colores 
    var i = 0   // Variable i va a determinar el color que se elije del array
    color.length = 3; // Acá seleccioné un length = 3 para que al llegar a color Verde (i=2) no resetee al "blue", haciendo que al volver a hacer click recién ahi se vuelva blue

    function alterarColor() {
        for (;i<=color.length;){
            i++;
            break;
        }   if (i==3) { //Acá checkeo si i es igual a 3, si lo es vuelve a 0
            i = 0;
        }
        return false;
    } 




    function dibujarCirculo(evento){
        var x = evento.pageX - pantalla.offsetLeft;
        var y = evento.pageY - pantalla.offsetTop;    
        pincel.fillStyle = color[i];    //Acá en el color puse que sea igual a color[i], lo que selecciona el numero de la variable i
        pincel.beginPath();
        pincel.arc(x,y,10,0,2*3.14);
        pincel.fill();
        console.log(x + "," + y);        
    }

    pantalla.onclick = dibujarCirculo;



    pantalla.oncontextmenu = alterarColor;

</script> 
solución!

Hola Tomás, gracias por responder!! No había visto tu mensaje y ya lo resolví. Lo hice tanto con For como con For-Of. Quedé manija parece! Con for :

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

    // DIBUJANDO CIRCULOS.

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

    pantalla.onclick = dibujarCirculo;

    //CAMBIANDO EL COLOR.

    function alterarColor() {

        colorActual++

      for(var color = 0; color <= colores.length; color++) {

         if(colorActual >= colores.length) {

             colorActual = 0;
             break;

           }
        }
          return false;  
    }

    pantalla.oncontextmenu = alterarColor;

</script> 

Con For-Of:

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

    // DIBUJANDO CIRCULOS.

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

    pantalla.onclick = dibujarCirculo;

    //CAMBIANDO EL COLOR.

    function alterarColor() {

        colorActual++;

     for(var color of colores) {

         if(colorActual >= colores.length) {

            colorActual = 0;
            break;

         } 
      }  
      return false; 
  }

    pantalla.oncontextmenu = alterarColor;


</script> 

Hola María de la Paz, serías tan amable de explicar por medio de //comentarios en el código cómo funciona el For-Of. Quedó muy resumido, más simple y con menos código. Felicidades...!!!