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)
4
respuestas

Circunferencia volviendo!!

Hola,

Creo que mas o menos quedo pero aun tengo un problema, mi circulo regresa e un salto muy grande y no decrementando como esperaria, alguien que me pueda ayudar con esto!! lo agradeceria mucho.

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

<script>
    //esta es el tamaño de la pantalla en la que se movera la circunferencia

    var pantalla = document.querySelector("canvas");
    var pincel = pantalla.getContext("2d");        
    pincel.fillStyle = "lightgrey";
    pincel.fillRect(0,0,600,400); 

//en este me diseña mi circulo es el color y su tamaño tambien 
    function disenharCircunferencia(x,y,radio){
        pincel.fillStyle = "blue";
        pincel.beginPath();
        pincel.arc(x,100,radio,0,2*Math.PI);
        pincel.fill();
    }    

    function limpiarPantalla(){

        pincel.clearRect(0,0,600,400);

    }
//la posicion en donde iniciara la circunferencia será 50...
    var x = 50;
    //se va a crear una variable para que esta decremente y vuela a la posicion inicial y una final para su inicio de otra variable
    var derechaizq = 1;
//Esta funcion me actualiza el circulo y lo va moviendo hacia la derecha mientras mi funcion limpiar me elimina el lugar anterior en el que estuvo el circulo
    function actualizarPantalla(){

        limpiarPantalla();



        if( x > 300){

            derechaizq = -100;
        }else{

            derechaizq = 1;

        }
         disenharCircunferencia(x,20,10);
        x = x + derechaizq;
}

      setInterval(actualizarPantalla,10);

//la funcion tiene que hacerme que mi circunferencia no llegue al limite de mi canvas, tiene que ir en sentido contrario al que va en este caso de derecha a izquierda




</script> 
4 respuestas

Hola yo lo aplique de la siguiente manera:

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

    function disenharCircunferencia(x,y,radio){
        pincel.fillStyle = "blue";
        pincel.beginPath();
        pincel.arc(x,y,radio,0,2*Math.PI);
        pincel.fill();
    }    

    function limpiarPantalla(){

        pincel.clearRect(0,0,600,400);

    }

    var x = 0
    var sentido = 1;

    function actualizarPantalla(){

        limpiarPantalla();
        if(x > 600){
            sentido = -1;
        }else if(x < 0){
            sentido = 1;
        }

        disenharCircunferencia(x,20,10);
        x = x + sentido;
    }

    setInterval(actualizarPantalla,100);

</script> 

El salto lo da por un error en el IF por lo que veo.

Cualquier otra duda no olvides en escribir :)

*NOTA: Si esta respuesta te ayudo no olvides marcarla como Solucion! *

solución!

Hola Ana, tienes un problema en el condicional. Como quieres desplazar la bola de izquierda a derecha y que luego regrese, debes establecer dos límites. Cuando la bola ha pasado en este caso los 550 pixeles, se debe empezar a disminuir en -1 esta cantidad, eso da el efecto de devolverse. Luego, cuando llegue a x = 50, (que es el inicio que elegiste), debes volver a aumentar esa cantidad en 1 unidad para que se desplace al lado contrario. Te dejo la función modificada. Un saludo

//Esta funcion me actualiza el circulo y lo va moviendo hacia la derecha mientras mi funcion limpiar me elimina el lugar anterior en el que estuvo el circulo
    function actualizarPantalla(){


        limpiarPantalla();

        if( x > 550){

            derechaizq = -1;
        }else if(x < 50){

            derechaizq = 1;

        }
         disenharCircunferencia(x,20,10);
        x = x + derechaizq;

}

Muchas gracias!!! a sus comentarios las dos fueron muy buenas

Me costo llegar a la solución, sin rehacer todo el código al final solo opté por crear una 'direccion' y hacer una validación. espero que te sirva (a parte que me da toc esa variable fuera de la función, sin contar el que se ocupe tan a la ligera el var, en vez de un let con menos scope)

var x = 0
    let direction = 'right';

    function actualizarPantalla(){

        limpiarPantalla();

        if (direction === 'right'){
            x++;
        }else {
            x--;
        }
        if (x > pantalla.width - 20){
            direction = 'left';
        }else if (x < 10){
            direction = 'right';

        }


        disenharCircunferencia(x,20,10);

    }