Poli.school
Transformações

Push e Pop

Veja como isolar o efeito das transformações

Você já viu que as transformações geométricas, como translação, rotação, escala e cisalhamento, são cumulativas: cada uma delas se soma às anteriores e afeta todos os comandos seguintes. Isso pode ser um problema quando você quer aplicar uma transformação a apenas uma forma, sem que ela influencie o restante do desenho. Para resolver isso, o p5.js oferece os comandos push() e pop().

O comando push() salva o estado atual do sistema de coordenadas, incluindo todas as transformações aplicadas e também configurações de estilo como cor e espessura de borda. O comando pop() restaura exatamente o estado que havia sido salvo pelo push() correspondente. Tudo o que estiver entre esses dois comandos fica isolado: as transformações e estilos aplicados nesse trecho valem apenas ali dentro e são descartados ao final.

Estrutura básica

Código 4.1 - estrutura geral para isolar transformações no p5.js
push();
  translate(200,200);
  rotate(radians(45));
  // formas afetadas pelas transformações
pop();
// formas seguintes voltam ao estado anterior

Exemplo

Para um exemplo de como utilizar esses comandos, teste o Código 4.2 e veja que o segundo retângulo não é afetado pela rotação.

Código 4.2 - Exemplo de uso de push e pop
function setup() {
  createCanvas(800,600);
  push();
    translate(250,200);
    rotate(radians(30));
    rect(0,0,200,100);
  pop();
  rect(500,400,200,100);
}
Carregando sketch…
Pense em push() e pop() como um par que sempre anda junto. Cada push() deve ter um pop() correspondente. Uma boa prática é indentar o código entre eles, como no exemplo, para deixar visualmente claro qual trecho está isolado. Isso torna o código mais legível e evita erros difíceis de rastrear.

Experimente criar vários blocos push() e pop() para desenhar diferentes formas transformadas de maneira independente, cada uma com sua própria rotação, posição ou escala. Esse padrão é a base para compor cenas complexas, animar múltiplos objetos e organizar desenhos que combinam muitas transformações sem que elas interfiram umas nas outras. Mais detalhes e exemplos podem ser encontrados na referência do p5.js.

Copyright © 2026