frameCount

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

  1. Incremento automático: O frameCount é incrementado automaticamente pelo p5.js a cada quadro renderizado.

  2. Começa em 0: Quando o programa inicia, o frameCount começa em 0 e aumenta em 1 a cada quadro.

  3. 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;
  }
}

				
			

Posts Similares

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *