1
resposta

Não entendo o erro do meu código.

Não compreendo o erro do meu código. Com ele a bolinha vai apenas em um sentido e não compreendo o porquê.

<meta charset="utf-8">
<title>Movimento</title>
<head><h2>Bolinha que se movimenta. Repetindo o código para fixar.</h2></head>
<br>
<body>
    <canvas width="600" height="400"></canvas>
    <script type="text/javascript">
        var tela = document.querySelector ("canvas");
        var pincel = tela.getContext ("2d");
        pincel.fillStyle = "lightgrey";
        pincel.fillRect(0,0,600,400);
        function desenhaBola (x,y){
            pincel.fillStyle = "blue";
            pincel.beginPath ();
            pincel.arc (x,y,10,0,2*Math.PI);
            pincel.fill();
        }
        var i = 0 
        var caminhoIda = true
        var caminhoVolta = false
        function movimentoIda (){
                    pincel.clearRect (0,0,600,400);
                    desenhaBola (i,100);                
                    i++
        }
        function movimentoVolta (){
                    pincel.clearRect (0,0,600,400);
                    desenhaBola (i,100);                
                    i=(i-1);
        }
        function idaVolta(){
            if(i>=600){
                caminhoIda==false;
                caminhoVolta ==true;
            }
            if (i<=0){
                caminhoVolta==false;
                caminhoIda ==true;
            }
            if (caminhoIda){
                movimentoIda();
            }
            if (caminhoVolta){
                movimentoVolta();
            }
        }
        setInterval(idaVolta,5);
    </script>
</body>

Não entendo porque a bola não retorna se coloquei os condicionais. Outra dúvida que surgiu ao ver a solução do instrutor foi por que que as condicionais que definem o "sentido", o incremento de x, devem ficar dentro da função? Tentei retratar o código sem copiá-lo e cometi esse erro e a bola foi em uma direção e não retornou.

Desde já agradeço. Sempre tenho respostas aqui.

1 resposta

Paloma, dentro da função "IdaVolta" você deve usar sinal de "=" para atribuir valor booleano. Se usar "==" você está apenas comparando e não muda o sentido da bola. Por isso não está voltando.

Quanto ao uso de variáveis fora de função, elas se tornam globais com acesso por toda a página. Declarando dentro da função se evitam muitos erros e elas se tornam locais apenas para aquele escopo.

Espero ter ajudado. Se ajudei, marque essa resposta como solução, por favor! Obrigado!