3
respostas

Resolução Alternativa

Escrevi um pouco mais que o Professor, mas acho que dessa forma fica mais fácil de entender o que está ocorrendo no programa.

<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 indo = true;

    function indoFrente(){
        limpaTela();
        desenhaCirculo(x, 20, 10);
        x++
        if(x>580){
            indo = false;
        }
    }

    function indoTraz(){
        limpaTela();
        desenhaCirculo(x, 20, 10);
        x = x - 1
        if(x<20){
            indo = true;
        }
    }

    function atualizaTela(){
        if(indo){
            indoFrente();
        }
        else{
            indoTraz();
        }
    }

    setInterval(atualizaTela, 10);

</script>
3 respostas

Bacana, Rafael!

Realmente dessa forma fica mais fácil de compreender através das funções!!!

Obrigado por ter compartilhado!

Um abraço e bons estudos!

Fiz parecido (lembrei do false e true tambem) mas deixei tudo em uma só função:

<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 controle = true;


    function atualizaTela() {

        if (controle==true){
            limpaTela();
            desenhaCirculo(x, 20, 10);
            x++;

            if (x>550) {

                controle=false;
            }
        }


        if (controle==false){
            limpaTela();
            desenhaCirculo(x, 20, 10);
            x--;


            if (x<50) {

                controle=true;
            }

        }
    }

    setInterval(atualizaTela, 10);

</script>

Achei bem interessante essa sua solução resumida no final.

Bacana, Alves!!!

Mandou bem!!!

Qualquer dúvida nos procure ;-)