1
resposta

Simplicidade nos códigos - lógica de programação 2

Fala galera, eu estava na aula de lógica de programação 2 no desafio de fazer a bolinha ir e voltar continuamente e de fato eu consegui porém eu fui por um caminho totalmente extenso o diferente ao ver a resolução percebi que era algo muito mais prático e não é a primeira vez que isso me acontece hahaha, mas eu achei tão engraçado que tive vontade de compartilhar o código que eu fiz aqui:

  • Mesmo meu código funcionando depois de um tempo a bolinha começava ir e voltar além do canvas e desaparecer, como se ela fosse cada vez mais longe e mais rapida XD, se alguem conseguir me explicar o por que disso eu agradeço!.
//Meu código:

function reverseAnimate(){
        limpaTela();
        desenhaCirculo(x, 20, 10);
        x = x - 1;

        if (x <= 0){
            setInterval(animate, 1);
        }
    }

    function animate(){
        limpaTela();
        desenhaCirculo(x, 20, 10);
        x++;

        if (x >= 600){
            setInterval(reverseAnimate, 1);
        }

    }

Solução da aula:

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

<script>

    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'lightgray';
    pincel.fillRect(0, 0, 600, 400);

    function desenhaCirculo(x, y, raio) {

        pincel.fillStyle = 'blue';
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2 * Math.PI);
        pincel.fill();
    }

    function limpaTela() {

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

    var x = 20;

    var sentido = 1;

    function atualizaTela() {

        limpaTela();

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

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

    setInterval(atualizaTela, 10);

</script>
1 resposta

Oi, Paulo! Como você está?

Desculpe a demora em obter uma resposta.

A função setInterval() serve para marcar um temporizador, ou seja, ela repete uma função após o tempo determinado pelo programa. O modo mais comum de usar essa função é desta maneira: setInterval(funçãoAqui, milisegundos). Assim, mostra a função que você escolheu para colocar dentro do temporizar, e, claro, o tempo selecionado.

A função será executada infinitamente, a não ser que você coloque um final nela, com a função clearInterval(). A clearInterval() limpa o temporizador e para a função colocada ali.

Por exemplo, se você colocar esta função:

function olaATodos() {
    console.log('Hello world');
}

temporizador = setInterval(olaATodos, 1000);

Você verá que a frase "Hello world" irá se repetir várias vezes, sem parar.

E, do mesmo jeito, fizemos assim no curso: colocamos um temporizador para a bolinha ir e voltar. Porém, dentro da função animate(), há um contador.

function animate(){
        limpaTela();
        desenhaCirculo(x, 20, 10);
        x++;

O contador x++ é o mesmo que falarmos x = x + 1. Ele irá se repetir, ainda mais pelo fato de que você usou os comandos com o if e inseriu a função justamente para repetir o contador novamente (as que estão dentro de animate e reverseAnimate).

if (x <= 0){
            setInterval(animate, 1);
        } 

e também o

if (x >= 600){
            setInterval(reverseAnimate, 1);
        }

Ou seja: há não somente um incremento nele, mas outro a mais, o tornando exponencial. Por isso a bolinha ganha um movimento mais rápido.

Espero ter ajudado! Caso as dúvidas persistirem, estamos à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado! ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software