1
resposta

Bolinha pulsante - tamanho++

Olá,

Minha dúvida com a questão da bolinha pulsante é: por que no lugar de declarar a variável fatorCrescimento para depois somar e subtrair da variável raio, não colocamos direto raio++ e raio--? Deixei anotado no código para indicar.

O código funciona mas fiquei em dúvida do porquê não funciona com raio++.

<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, cor) {

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

    function limpaTela() {

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



    var raio = 19;
    var fatorCrescimento = 0;

    function pulsar() {

        limpaTela();

        if(raio > 30) {

            fatorCrescimento = -1 // raio--

        } else if(raio < 20) {

            fatorCrescimento = 1 // raio++
        }

        raio = raio + fatorCrescimento;
        desenhaCirculo(300, 200, raio, 'pink');

    } 



    setInterval(pulsar, 20);

</script>
1 resposta

Olá,

Tive a mesma duvida, porém no seu código, o Incremento (++) ou decremento (--) não podem estar associados a variável "raio", já que quem vai dar o acréscimo ou decréscimo é a variável "fatorCrescimento", logo essa parte do código logicamente seria:

if(raio > 30) {

            fatorCrescimento = fatorCrescimento--

        } else if(raio < 20) {

            fatorCrescimento = fatorCrescimento++
        }

mas ainda assim não vai funcionar, pesquisando mais a fundo vi que o acréscimo (++) de uma variável pode ser declarado tanto antes como depois:

y= x++   //Sufixo

ou

y = ++x   //Prefixo

mas isso tem muita diferença na hora do código exemplo:

x = 12
y = x++

ele vai resultar da seguinte forma Y = 12 ; X = 13 , ou seja ele atribui primeiro y = x pra depois acrescentar 1 unidade no X , porém declarando

x = 12
y = ++x

ele vai resultar Y = 13 e X = 13, e ai seria a forma correta do seu código

if(raio > 30) {

            fatorCrescimento = --fatorCrescimento

        } else if(raio < 20) {

            fatorCrescimento = ++fatorCrescimento
        }

Dessa forma o código vai funcionar corretamente, Espero ter ajudado!