Criando a cena do jogador

Com as configurações do projeto feitas, podemos começar a trabalhar no personagem controlado pelo jogador.

A primeira cena definirá o objeto Player. Um dos benefícios de criar uma cena Player separada é que podemos testá-la separadamente, mesmo antes de criarmos outras partes do jogo.

Estrutura de nós

Para iniciarmos, precisamos escolher o nó raiz para o objeto jogador. Como regra geral, o nó raiz da cena deve refletir a funcionalidade desejado do objeto: o que o objeto é. Clique no botão "Outros Nós" e adicione um nó Area2D à cena.

../../_images/add_node.png

Godot vai mostrar um ícone de aviso próximo do nó na árvore de cenas. Você pode ignorá-lo por enquanto; vamos falar disso mais tarde.

Com a Area2D, nós podemos detectar objetos que se sobreponham ou vão de encontro ao jogador. Mude seu nome para Player com um clique duplo no nome do nó. Já que nós configuramos o nó raiz, nós agora podemos inserir nós adicionais para adicionar mais funcionalidades.

Antes de adicionarmos filhos ao nó Player, queremos ter certeza de que não os moveremos ou redimensionaremos acidentalmente clicando neles. Selecione o nó e clique no ícone à direita do cadeado; sua dica de ferramenta diz "Garante que os filhos do objeto não sejam selecionáveis".

../../_images/lock_children.png

Salve a cena. Clique em Cena -> Salvar ou pressione Ctrl + S no Windows/Linux ou Cmd + S no macOS.

Nota

Para esse projeto, vamos seguir as convenções de nomeação do Godot.

  • GDScript: Classes (nós) usam o estilo PascalCase (IniciaisMaiúsculas), variáveis e funções usam snake_case (minúsculas_separadas_por_sublinha) e constantes usam ALL_CAPS (TODAS_MAIÚSCULAS) (Veja mais em Guia de Estilo GDScript).

  • C#: Classes, variáveis de exportação e métodos usam PascalCase, campos privados usam _camelCase, variáveis locais e parâmetros usam camelCase (Veja :ref: doc_c_sharp_styleguide). Tenha o cuidado de digitar os nomes dos métodos com precisão ao conectar os sinais.

Animação por Sprites

Clique no nó Player e adicione um nó AnimatedSprite (sprite animado) como filho. O AnimatedSprite irá lidar com a aparência e as animações do nosso jogador. Note que existe um símbolo de alerta ao lado do nó. Um AnimatedSprite exige um recurso do tipo SpriteFrames (quadros de sprite), que é uma lista das animações que ele pode mostrar. Para criar um, encontre a propriedade Frames no Inspetor e clique em "[vazio]" -> "Novo SpriteFrames". Clique novamente para abrir o painel de "SpriteFrames":

../../_images/spriteframes_panel.png

À esquerda está uma lista de animações. Clique em "default" e a renomeie para "walk". Então, clique no botão "Nova Animação" para criar uma segunda animação chamada "up". Encontre as imagens do jogador na aba "Arquivos" - elas estão na pasta art que você descompactou mais cedo. Arraste as duas imagens de cada animação, chamadas playerGrey_up[1/2] e playerGrey_walk[1/2] para dentro da região "Frames da Animação" do painel para a animação correspondente:

../../_images/spriteframes_panel2.png

As imagens do jogador são um tanto grandes demais para a janela de jogo, então precisamos reduzir sua escala. Clique no nó AnimatedSprite e configure a propriedade Scale (escala) para (0.5, 0.5). Você pode encontrá-la no Inspetor na seção Node2D.

../../_images/player_scale.png

Finalmente, adicione um CollisionShape2D (forma de colisão 2D) como filho de Player. Isso determina a "hitbox" (caixa de acerto) do jogador, ou seja, os limites da sua área de colisão. Para este personagem, um nó CapsuleShape2D (forma cápsula 2D) é o que melhor se encaixa. Então, ao lado de "Shape" (forma) no Inspetor, clique em "[vazio]" -> "Novo CapsuleShape2D". Utilizando os dois manipuladores de tamanho, redimensione a forma para cobrir o sprite:

../../_images/player_coll_shape.png

Quando tiver finalizado, sua cena Player deveria se parecer assim:

../../_images/player_scene_nodes.png

Certifique-se de salvar a cena novamente após as alterações.

Na próxima parte, adicionaremos um roteiro ao nó jogador para movê-lo e animá-lo. Depois, configuraremos a detecção de colisão para saber quando o jogador é atingido por alguma coisa.