Sprites, Física e Movimento

0

🎯 Objetivos da Lição

Ao final da aula, o aluno será capaz de:

  • Adicionar sprites ao jogo
  • Utilizar Arcade Physics
  • Detectar colisões
  • Implementar movimentação com teclado

🖼️ Parte 1 – Adição de Sprites

https://global.discourse-cdn.com/free1/uploads/phaser1/original/2X/9/95c165b9d8599aa5a9bd6ed00f47a2b65b57dfcd.png
https://phaserfiles.sfo3.digitaloceanspaces.com/phaser/v3.85.0/shots/ZqsK4kaV.png
https://miro.medium.com/v2/resize%3Afit%3A1400/1%2A46vo7NRMjPARJCGoqHzAOw.gif

4

Sprites são imagens exibidas na tela que podem se mover e interagir.

🔹 Carregar imagem (preload)

preload() {
this.load.image("player", "assets/player.png");
this.load.image("obstacle", "assets/obstacle.png");
}

🔹 Adicionar sprite (create)

create() {
this.player = this.add.sprite(400, 300, "player");
}

Mas isso ainda não possui física.


⚙️ Parte 2 – Arcade Physics

Ativar física na configuração:

const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
physics: {
default: "arcade",
arcade: {
debug: false
}
},
scene: [GameScene]
};

Agora podemos criar sprite com física:

this.player = this.physics.add.sprite(400, 300, "player");

Isso adiciona:

  • Velocidade
  • Gravidade (se configurada)
  • Colisão

⌨️ Parte 3 – Movimento com Teclado

🔹 Criar controles

create() {
this.player = this.physics.add.sprite(400, 300, "player");
this.cursors = this.input.keyboard.createCursorKeys();
}

🔹 Movimentação no update()

update() {
this.player.setVelocity(0); if (this.cursors.left.isDown) {
this.player.setVelocityX(-200);
}
else if (this.cursors.right.isDown) {
this.player.setVelocityX(200);
} if (this.cursors.up.isDown) {
this.player.setVelocityY(-200);
}
else if (this.cursors.down.isDown) {
this.player.setVelocityY(200);
}
}

Agora o personagem se move livremente.


💥 Parte 4 – Colisão

Criar obstáculo:

create() {
this.player = this.physics.add.sprite(400, 300, "player"); this.obstacle = this.physics.add.staticSprite(400, 100, "obstacle"); this.physics.add.collider(this.player, this.obstacle);
}

🔹 Diferença

  • physics.add.sprite() → objeto dinâmico
  • physics.add.staticSprite() → objeto fixo

Colisão impede atravessar.


🎯 Atividade Prática

Criar Personagem Controlável com Obstáculo


📁 Estrutura sugerida

src/
├── scenes/
│ └── GameScene.js
└── main.js

🧩 GameScene.js Completo

import Phaser from "phaser";export default class GameScene extends Phaser.Scene {
constructor() {
super("GameScene");
} preload() {
this.load.image("player", "assets/player.png");
this.load.image("obstacle", "assets/obstacle.png");
} create() {
this.player = this.physics.add.sprite(400, 500, "player"); this.obstacle = this.physics.add.staticSprite(400, 300, "obstacle"); this.physics.add.collider(this.player, this.obstacle); this.cursors = this.input.keyboard.createCursorKeys();
} update() {
this.player.setVelocity(0); if (this.cursors.left.isDown) {
this.player.setVelocityX(-200);
}
else if (this.cursors.right.isDown) {
this.player.setVelocityX(200);
} if (this.cursors.up.isDown) {
this.player.setVelocityY(-200);
}
else if (this.cursors.down.isDown) {
this.player.setVelocityY(200);
}
}
}

🧠 Conceitos Trabalhados

  • Carregamento de assets
  • Arcade Physics
  • Objetos dinâmicos vs estáticos
  • Detecção de colisão
  • Controle via teclado
  • Loop contínuo com update()

📝 Critérios de Avaliação

CritérioPeso
Sprite carregado corretamente2
Física ativada2
Movimento funcional2
Colisão funcionando2
Organização do código2

Total: 10 pontos


🚀 Desafio Extra

  • Adicionar gravidade
  • Criar múltiplos obstáculos
  • Implementar área de limite do mapa
  • Adicionar animação ao mover
  • Criar sistema de “vida” ao colidir

🎮 Conclusão

Agora existe algo vivo dentro do jogo.

Teclas pressionadas produzem movimento.
Objetos bloqueiam passagem.
Existe espaço. Existe regra. Existe interação.