Capítulo 21 — Coordenadas, Canvas e desenho 2D
Parte 2A — Os fundamentos do jogo 2D · Capítulo 21 de 62 · 7 h
Capítulo 21 — Coordenadas, Canvas e desenho 2D
Nível: intermediário Duração estimada: 7 h Pré-requisitos: capítulo 19 (Flutter acelerado,
CustomPainter) e capítulo 20 (game loop,Ticker, delta time) O que você saberá fazer ao final: desenhar qualquer cena 2D à mão comCanvasePaint, posicioná-la com precisão de pixel no sistema de coordenadas da tela, transformá-la (translação, rotação, escala) e animá-la com odtdo game loop.
21.0 — Objetivos do capítulo
Ao final deste capítulo, você será capaz de:
- explicar por que o eixo
Yda tela é orientado para baixo, ao contrário do plano cartesiano matemático; - situar a origem
(0, 0)de uma área de desenho e raciocinar em coordenadas locais; - distinguir um pixel lógico de um pixel físico e usar
devicePixelRatio; - ler o tamanho da área de desenho passado para
paint()e se adaptar a ele; - manipular
Offset,RecteSize, os três tipos básicos da geometria do Flutter; - antecipar a diferença entre
Vector2(Flame) eOffset(Flutter); - escrever um
CustomPainterlimpo, com umshouldRepaint()correto; - configurar um objeto
Paint: cor, estilo, espessura do traço; - desenhar retângulos, círculos, linhas, elipses, retângulos arredondados, caminhos e pontos;
- desenhar texto em um
CanvascomTextPainter; - construir cores em ARGB e aplicar transparência;
- aplicar um gradiente linear ou radial a uma forma;
- explicar e explorar a ordem de desenho («algoritmo do pintor»);
- usar
save()/restore()sem nunca desequilibrar a pilha; - aplicar
translate(),rotate()escale(), e entender por que a ordem importa; - desenhar uma forma em torno do seu centro, e não do seu canto (noção de âncora);
- limitar o desenho a uma área com
clipRect(); - explicar o double buffering e por que a tela não pisca;
- identificar o que é caro em
paint()e evitar; - desenhar uma grade de masmorra e um personagem inteiramente com formas geométricas;
- animar um desenho com o
dtdo capítulo 20.
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão