1
resposta

Gravitação da bolinha em torno do mouse

Já que eu tenho como conseguir a posição do mouse e tenho como controlar a bolinha...

... por que não juntar as duas coisas e colocar um pouco de Física pra modelar um sistema de gravitação.

Acho que o resultado fica legal.

<meta charset="UTF-8">

<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);
        pincel.fillStyle = 'lightgray';
        pincel.fillRect(0, 0, 600, 400);
    }

    var x = 20;
    var y = 20;
    var direcao_x = 0.36;
    var direcao_y = 0.64;
    var mouse_x = 300;
    var mouse_y = 200;
    var intensidadeMouse = 1.0;

    function atualizaDirecao(){
        direcao_x += intensidadeMouse * ((mouse_x-x)/((mouse_x-x)**2+(mouse_y-y)**2)**(3/2))
        direcao_y += intensidadeMouse * ((mouse_y-y)/((mouse_x-x)**2+(mouse_y-y)**2)**(3/2))
    }

    function atualizaPosicao(){
        x += direcao_x + (x>600?-600:0) + (x<0?600:0);
        y += direcao_y + (y>400?-400:0) + (y<0?400:0);
    }

    function atualizaTela(){
        atualizaDirecao();
        atualizaPosicao();
        limpaTela();
        desenhaCirculo(x, y, 10);
    }

    function atualizaMousePosition(evento){
        mouse_x = evento.pageX;
        mouse_y = evento.pageY;
    }

    tela.onmousemove = atualizaMousePosition;
    setInterval(atualizaTela, 5);

</script>
1 resposta

Olá, Robson! Como vai?

Mandou muito bem! Parabéns!

Caso tenha ficado não deixe de compartilhar com a gente.

Continue praticando, bons estudos e até mais! =)