Como usar o frameCount() no p5.js?
No p5.js, o framecount (ou frameCount
em código) é uma variável interna que conta o número de quadros (frames) que foram renderizados desde o início da execução do programa. Ele é útil para controlar ou sincronizar eventos ao longo do tempo em uma animação ou simulação.
Características do frameCount
Incremento automático: O
frameCount
é incrementado automaticamente pelo p5.js a cada quadro renderizado.Começa em 0: Quando o programa inicia, o
frameCount
começa em 0 e aumenta em 1 a cada quadro.Taxa de quadros (frame rate): O valor do
frameCount
depende da taxa de quadros (frames por segundo, ou FPS) definida no programa. Por padrão, o p5.js tenta rodar a 60 FPS.
Explicando a animação
Aqui está a animação que usaremos como referência:
Passo 1: Configurando o ambiente
Antes de começarmos a programar, certifique-se de ter um ambiente de desenvolvimento configurado:
Um editor de código (VS Code)
- Um navegador (Google Chrome)
Arquivo de template
Passo 2: Declaração de variáveis
Aqui, estamos declarando as variáveis que serão usadas para armazenar os sprites e suas imagens.
var garden, rabbit, apple, orangeL, redL;
var gardenImg, rabbitImg, appleImg, orangeImg, redImg;
Passo 3: Função preload()
A função preload() é usada para carregar imagens e animações antes do jogo iniciar.
loadImage("garden.png")
: Carrega a imagem do fundo do jogo.loadImage("rabbit.png")
: Carrega a imagem do personagem principal.loadImage("apple.png")
: Carrega a imagem da maçã.loadImage("orangeLeaf.png")
: Carrega a imagem da folha laranja.loadImage("redImage.png")
: Carrega a imagem do objeto vermelho.
function preload(){
gardenImg = loadImage("garden.png");
rabbitImg = loadImage("rabbit.png");
appleImg = loadImage("apple.png");
orangeImg = loadImage("orangeLeaf.png");
redImg = loadImage("redImage.png");
}
Passo 4: Função setup()
A função setup()
é executada apenas uma vez e configura o ambiente do jogo.
createCanvas(400,400)
: Cria um canvas de 400×400 pixels.
function setup(){
createCanvas(400,400);
Agora criamos o sprite do fundo do jardim:
garden = createSprite(200,200);
garden.addImage(gardenImg);
createSprite(200,200)
: Cria o sprite do fundo posicionado no centro da tela.addImage(gardenImg)
: Adiciona a imagem do jardim ao sprite.
Agora criamos o sprite do coelho:
rabbit = createSprite(160,340,20,20);
rabbit.scale = 0.09;
rabbit.addImage(rabbitImg);
createSprite(160,340,20,20)
: Cria o sprite do personagem na posição desejada.rabbit.scale = 0.09
: Ajusta o tamanho do personagem.addImage(rabbitImg)
: Adiciona a imagem do personagem ao sprite.
E criamos também os sprites das bordas:
leftBoundary = createSprite(0,0,50,800);
leftBoundary.visible = false;
rightBoundary = createSprite(410,0,50,800);
rightBoundary.visible = false;
createSprite(0,0,50,800)
: Cria um sprite para a borda esquerda.createSprite(410,0,50,800)
: Cria um sprite para a borda direita.visible = false
: Torna os sprites invisíveis para que não sejam vistos na tela, mas ainda funcionem como barreiras.
Passo 5: Função draw()
A função draw() é chamada continuamente para atualizar a tela do jogo e manter a animação fluida.
background(0)
: Define o fundo da tela como preto.rabbit.x = World.mouseX
: Faz com que o personagem siga a posição do mouse no eixo X.
function draw() {
background(0);
rabbit.x = World.mouseX;
Agora, usaremos frameCount
para controlar a frequência com que os objetos aparecem na tela:
var select_sprites = Math.round(random(1,3));
switch (select_sprites){
case 1:
createApples();
break;
case 2:
createOrange();
break;
case 3:
createRed();
break;
default:
break
}
Math.round(random(1,3))
: Escolhe aleatoriamente um tipo de fruta para cair.switch (select_sprites)
: Verifica o número gerado e executa a função correspondente.case 1: createApples();
: Se o número for 1, cria uma maçã.case 2: createOrange();
: Se o número for 2, cria uma folha laranja.case 3: createRed();
: Se o número for 3, cria um objeto vermelho.
Adicionando colisão do corredor nas bordas:
rabbit.collide(leftBoundary);
rabbit.collide(rightBoundary);
rabbit.collide(leftBoundary)
: Impede que o personagem ultrapasse o limite esquerdo.rabbit.collide(rightBoundary)
: Impede que o personagem ultrapasse o limite direito.
Por fim, desenhamos todos os sprites na tela:
drawSprites();
}
drawSprites()
: Exibe todos os sprites criados na tela do jogo, garantindo que a animação seja atualizada a cada quadro.
Passo 6: Criando a função para gerar as maças
A função createApples() é chamada continuamente para criar as maças na tela da animação.
frameCount % 80 == 0
: Cria um novo sprite a cada 80 quadros.random(50, 350)
: Faz com que a fruta apareça em posições aleatórias no eixo X.createSprite(random(50, 350),40, 10, 10)
: Cria o sprite na posição definida.addImage(appleImg)
: Adiciona a imagem da maçã ao sprite.scale=0.07
: Define o tamanho do sprite.velocityY = 3
: Define a velocidade de queda.lifetime = 150
: Evita consumo excessivo de memória ao remover sprites antigos.
function createApples() {
if (frameCount % 80 == 0) {
apple = createSprite(random(50, 350),40, 10, 10);
apple.addImage(appleImg);
apple.scale=0.07;
apple.velocityY = 3;
apple.lifetime = 150;
}
}
Passo 7: Criando a função para gerar as folhas laranjas
A função createOrange() é chamada continuamente para criar as maças na tela da animação.
frameCount % 100 == 0
: Cria um novo sprite a cada 100 quadros.random(50, 350)
: Faz com que a fruta apareça em posições aleatórias no eixo X.createSprite(random(50, 350),40, 10, 10)
: Cria o sprite na posição definida.addImage(orangeImg)
: Adiciona a imagem da folha laranja ao sprite.scale=0.08
: Define o tamanho do sprite.velocityY = 3
: Define a velocidade de queda.lifetime = 150
: Evita consumo excessivo de memória ao remover sprites antigos.
function createOrange() {
if (frameCount % 100 == 0) {
orangeL = createSprite(random(50, 350),40, 10, 10);
orangeL.addImage(orangeImg);
orangeL.scale=0.08;
orangeL.velocityY = 3;
orangeL.lifetime = 150;
}
}
Passo 8: Criando a função para gerar as folhas vermelhas
A função createRed() é chamada continuamente para criar as maças na tela da animação.
frameCount % 120 == 0
: Cria um novo sprite a cada 120 quadros.random(50, 350)
: Faz com que a fruta apareça em posições aleatórias no eixo X.createSprite(random(50, 350),40, 10, 10)
: Cria o sprite na posição definida.addImage(redImg)
: Adiciona a imagem da folha vermelha ao sprite.scale=0.06
: Define o tamanho do sprite.velocityY = 3
: Define a velocidade de queda.lifetime = 150
: Evita consumo excessivo de memória ao remover sprites antigos.
function createRed() {
if (frameCount % 120 == 0) {
redL = createSprite(random(50, 350),40, 10, 10);
redL.addImage(redImg);
redL.scale=0.06;
redL.velocityY = 3;
redL.lifetime = 150;
}
}