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

Mi pelotita "tiembla" al final!

Hola!

Yo creé una segunda función llamada volver(), para que arranque en X=600 y vaya restando de a 1 con x--. Luego llamé: primero a la función original actualizarPantalla y luego a la función volver, con la idea de que se ejecute primero una y al finalizar la otra. Pero la pelotita queda al final como rebotando.

¿Por qué no funciona la lógica?

Aquí paso mi código:

<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(); // llename la circunferencia

    }

    function limpiarPantalla() {
        pincel.clearRect(0, 0, 600, 400);
    }

    var x = 0;

    function actualizarPantalla() {
        limpiarPantalla();
        disenharCircunferencia(x, 20, 10);
        x++;
    }

    var x = 600;

    function volver(){            
        limpiarPantalla();
        disenharCircunferencia(x, 20, 10);
        x--;

    }

    setInterval(actualizarPantalla, 2);
    setInterval(volver,2);

</script>
4 respuestas

Hola buenos días, estuve probando tu código y tiene algunas cosas por mejorar, lo primero es que tu asignas la variable x = 0; y luego la reescribes como x=600; entonces la variable va a empezar desde 600, lo segundo es que llamas a las dos funciones prácticamente al tiempo lo que hace que ella se confunda y vaya tanto para adelante como para atrás lo que genera ese efecto como de vibración. lo mejor es generar un if y darle condiciones para que ella sepa cuando ir hacía un lugar y luego devolverse.

var x = 0; var aux = 600 function actualizarPantalla(){ limpiarPantalla();

    if(x <= aux){
        disenharCircunferencia(x,20,10);
        x++;
        console.log(aux);
        if (x == aux){
            aux = 0;
        }
    }else if(x >= x){
        disenharCircunferencia(x,20,10);
        x--;
        if (x == aux){
            aux = 600;
        }
    }

}

setInterval(actualizarPantalla,1)

// esta es la forma en la que yo lo hice, apoyandome en una variable auxiliar que marcara los limites

Muchas gracias, Cristian!

Aun me cuesta entender por qué ponés x >= x. Estás comparando la variable x con sí misma? Gracias nuevamente por tu tiempo!

Alejandra.

Hola, que pena contigo esa fue una prueba que quería hacer pero esa condición incluso sobra.

var x = 0;
var aux = 600
function actualizarPantalla(){
    limpiarPantalla();

    if(x <= aux){
        disenharCircunferencia(x,20,10);
        x++;
        console.log(aux);
        if (x == aux){
            aux = 0;
        }
    }else {
        disenharCircunferencia(x,20,10);
        x--;
        if (x == aux){
            aux = 600;
        }
    }

}

setInterval(actualizarPantalla,1)