Desenvolvimento de
jogos em Flutter
Erick Zanardo - DevCamp 2019
Quem sou eu?
● Desenvolvedor Full Stack
desde 2007
● Trabalha na Dextra
● Desenvolve jogos ao invés
de dormir nas horas vagas
Meu início com Game dev
Fireslime
Fireslime Games
Mas antes… Flutter
Flutter
"Flutter is Google’s UI toolkit for building
beautiful, natively compiled applications
for mobile, web, and desktop from a
single codebase."
- https://flutter.dev
Flutter - Features
● Multiplataforma
● Hot reload
● Compilação nativa
● Possibilita código específico por
plataforma
Flutter - Multiplataforma
Flutter - Hot Reload
Flutter - Linguagem
Flutter - Compilação nativa
Dart - Linguagem
int fibonacci(int n) {
if (n == 0 || n == 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
var result = fibonacci(20);
Flutter - Código específico por
plataforma
Flutter - Como funciona realmente?
Aplicação escrita em
Dart
Skia canvas
Widgets escritos
em Dart
Plataforma nativa
E foi aí que vimos uma oportunidade em
usar o flutter para desenvolver jogos....
O que precisamos para fazer um Jogo?
- Tocar sons
- Receber inputs do jogador
- Desenhar coisas na tela
Flame
● Criado por Luan Nico
● Mantido pela Fireslime
Um motor de jogos minimalista que provê um conjunto de soluções para
resolver problemas comuns que todo desenvolvedor de jogos em Flutter
compartilharão.
● GameLoop
● Sistema de Componentes
● Sprites/SpriteSheets
● SVGs
● Spritesheet Animações
● Áudio
● Input (Provido por Flutter, mas Flame provê alguns helpers)
● Box2d
Flame - Features
Flame Features: Spritesheet Animations
Flame Features: Flare
Flame Features: Flare Exemplo
Flame Features: Tiled
Um exemplo bem minimalista
class BallComponent extends PositionComponent {
// Variable initialization ommited
BallComponent(this._screenSize) {
y = width = height = 50;
}
@override
void update(double dt) {
x += 300 * dt * _direction; // 300 Pixels per second
if ((x <= 0 && _direction == -1) ||
(x + width >= _screenSize.width && _direction ==1))
_direction = _direction * -1;
}
@override
void render(Canvas canvas) {
canvas.drawOval(toRect(), _paint);
}
}
class BallGame extends BaseGame {
BallGame(Size screenSize) {
size = screenSize;
add(BallComponent(size));
}
}
Flutter Widgets + Flame == Win
Flutter Widgets + Flame == Win
Flutter Widgets
Flame Components
Vantagens de se usar Flutter + Flame
● Builds pequenos
● Hot Reload ajuda na produtividade
● Facilidade para construção de UIs
● Comunidade bem ativa
● Integrar jogos dentro de aplicativos de maneira
fácil (para Gamificação por exemplo)
Desvantagens de se usar Flutter + Flame
● Apenas 2d
● Algumas coisas ainda são trabalhosas de se
fazer
● Não possui um editor visual (como existe na
Unity ou Godot por exemplo)
Desafios indiedev: Concorrência
Lançamentos na Steam:
5068 jogos até agora (Agosto) 2019
8742 jogos em 2018
6685 jogos em 2017
- fonte: https://steamspy.com
Desafios indiedev: Escolha algo diferente
Desafios indiedev: Divulge
Desafios indiedev: Participe de
comunidades e Game Jams.
Perguntas?
Meus contatos: Fireslime Games:

Erick Zanardo - Desenvolvimento de Jogos em Flutter