Pular para o conteúdo
murad.guide

Programação Criativa

Capítulo 11

Movimento com requestAnimationFrame

2 min de leitura 377 palavras 1 gravura

RAF agenda o próximo quadro. Você atualiza atributos SVG a cada chamada.

Trabalhe sobre uma cópia da pasta inicio do exemplo correspondente. Leia, digite, mude uma coisa, preveja, recarregue e confira. A referência completa fica na raiz da pasta do exemplo, no pacote anexo.

O que você pratica

Movimento com requestAnimationFrame

Bola vai e volta

A referência move o cx do círculo.

Erro comum: usar setInterval fixo sem necessidade — RAF sincroniza melhor com a tela.

Velocidade

No inicio, vx começa 0. Coloque 2.2 (ou outro).

x += vx;
if (x > 440 || x < 40) vx *= -1;
bola.setAttribute("cx", x);

Pare e experimente. A bola deve atravessar.

Limites

Ao cruzar 40 ou 440, multiplique vx por -1.

Não publique exercícios com dados reais. Conteúdo fictício de Recife.

Como o exemplo desta etapa funciona

A referência desta etapa reúne app.js, index.html, styles.css. Abra o resultado pronto, localize o trecho que produz movimento com requestanimationframe e só então compare com inicio. Os dois diretórios são independentes: você pode errar, restaurar e repetir sem buscar arquivos de outro capítulo.

Leitura do resultado

Observe primeiro o que permanece parado e o que responde a uma ação. Depois altere um único número, cor, coordenada ou condição. Antes de recarregar, escreva o efeito esperado. Essa previsão separa uma mudança compreendida de uma tentativa ao acaso.

Diagnóstico guiado

Se a cena sumir, confira a primeira mensagem do Console e o caminho dos arquivos. Em SVG, revise viewBox, atributos e ordem das formas. Em p5.js, confirme a biblioteca local e se setup e draw foram escritos corretamente. Em Canvas ou WebGL, verifique o contexto e os limites numéricos antes de mudar outra coisa.

Critério de avanço

Avance quando conseguir descrever a cena, modificar um parâmetro com previsão e restaurar a referência sem copiar arquivos de uma etapa posterior.

Atividades

  1. Quem atualiza cx?
  2. Sem RAF a animação?
  3. Precisa de servidor?

Respostas comentadas

Só abra depois de tentar.

Atividade 1. O JS via setAttribute.

Atividade 2. Não anima sozinha.

Atividade 3. Não nesta etapa.

Exemplo deste capítulo: pacote de exemplos/11-svg-raf/.

O arquivo completo

Referência do exemplo 11-svg-raf, reproduzida aqui para que você possa conferir sem sair da página.

index.html

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>RAF — Laboratório da Luz</title>
  <link rel="stylesheet" href="styles.css">

</head>
<body>
  <a class="skip" href="#conteudo">Ir ao conteúdo</a>
  <header>
    <p class="tag">Laboratório da Luz · Recife</p>
    <h1>RAF</h1>
  </header>
  <main id="conteudo">
<p class="dica">requestAnimationFrame chama sua função a cada quadro.</p>
<div class="stage" style="background:#0f1a22">
<svg width="480" height="200" viewBox="0 0 480 200">
  <circle id="bola" cx="40" cy="100" r="28" fill="#6ec6c9"/>
</svg>
</div>
  </main>
  <footer>
    <p>Conteúdo fictício para estudo local. Não publique dados reais.</p>
  </footer>
  <script src="app.js"></script>
</body>
</html>

app.js

const bola = document.getElementById("bola");
let x = 40;
let vx = 2.2;
function quadro(t) {
  x += vx;
  if (x > 440 || x < 40) vx *= -1;
  bola.setAttribute("cx", x);
  requestAnimationFrame(quadro);
}
requestAnimationFrame(quadro);