Curso Intensivo de Canvas: Explore a Criatividade
Sobre a Aula

Animação de objetos e transições suaves

Vamos agora explorar a animação de objetos e transições suaves no HTML Canvas, aprimorando suas habilidades de criar movimentos dinâmicos e visuais atraentes.

1. Animação de Objetos:

Na animação no Canvas, é comum animar propriedades específicas de objetos, como posição, tamanho, cor, ou qualquer outra característica que possa ser alterada ao longo do tempo.

Exemplo de Animação de Posição:

var quadrado = {
  x: 50,
  y: 50,
  velocidade: 2,
};

function animar() {
  contexto.clearRect(0, 0, canvas.width, canvas.height);

  contexto.fillRect(quadrado.x, quadrado.y, 30, 30);

  quadrado.x += quadrado.velocidade;

  if (quadrado.x > canvas.width) {
    quadrado.x = 0;
  }

  requestAnimationFrame(animar);
}

animar();

2. Transições Suaves:

Para criar transições suaves entre os quadros, é fundamental entender a interpolação, que é o processo de calcular valores intermediários entre dois estados.

No contexto da animação, isso resulta em movimentos mais fluidos.

Exemplo de Transição Suave:

var circulo = {
  x: 50,
  y: 50,
  destinoX: 200,
  destinoY: 100,
  velocidade: 2,
};

function animar() {
  contexto.clearRect(0, 0, canvas.width, canvas.height);

  contexto.beginPath();
  contexto.arc(circulo.x, circulo.y, 20, 0, 2 * Math.PI);
  contexto.fill();

  // Interpolação suave para transição entre as posições
  circulo.x += (circulo.destinoX - circulo.x) * 0.05;
  circulo.y += (circulo.destinoY - circulo.y) * 0.05;

  requestAnimationFrame(animar);
}

animar();

Neste exemplo, o círculo se move suavemente em direção a uma posição de destino usando a interpolação para calcular as posições intermediárias.

3. Combinando Animações:

Você pode combinar várias animações para criar movimentos mais complexos. Lembre-se de ajustar as velocidades e interpolações conforme necessário para alcançar o efeito desejado.

Vamos ver como fica na prática:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Exemplo de Combinação de Animações no Canvas</title>
  <style>
    canvas {
      border: 1px solid #000;
      display: block;
      margin: 20px auto;
    }
  </style>
</head>
<body>
  <canvas id="meuCanvas" width="400" height="200"></canvas>

  <script>
    var canvas = document.getElementById("meuCanvas");
    var contexto = canvas.getContext("2d");

    var quadrado1 = { x: 50, y: 50, velocidade: 2 };
    var quadrado2 = { x: 300, y: 100, velocidade: -2 };
    var circulo = { x: 200, y: 100, destinoX: 200, destinoY: 150, velocidade: 0.05 };

    function animar() {
      contexto.clearRect(0, 0, canvas.width, canvas.height);

      // Quadrado 1 se move para a direita
      contexto.fillRect(quadrado1.x, quadrado1.y, 30, 30);
      quadrado1.x += quadrado1.velocidade;

      if (quadrado1.x > canvas.width) {
        quadrado1.x = 0;
      }

      // Quadrado 2 se move para a esquerda
      contexto.fillRect(quadrado2.x, quadrado2.y, 30, 30);
      quadrado2.x += quadrado2.velocidade;

      if (quadrado2.x < 0) {
        quadrado2.x = canvas.width;
      }

      // Círculo realiza uma transição suave
      contexto.beginPath();
      contexto.arc(circulo.x, circulo.y, 20, 0, 2 * Math.PI);
      contexto.fill();

      circulo.x += (circulo.destinoX - circulo.x) * circulo.velocidade;
      circulo.y += (circulo.destinoY - circulo.y) * circulo.velocidade;

      requestAnimationFrame(animar);
    }

    animar();
  </script>
</body>
</html>

Visualização do código

Exemplo de Combinação de Animações no Canvas

Ao compreender a animação de objetos e transições suaves, você terá mais controle sobre a dinâmica visual das suas criações no Canvas.

Nos próximos tópicos, abordaremos a otimização de desempenho da animação para garantir experiências suaves e responsivas.

Continue praticando e experimentando para aprimorar suas habilidades.

Entrar na conversa
Rolar para cima