Tutorial Space Shooter Godot: Parallax - Parte 2

Aprenda a criar um jogo Space Shooter de forma simples e prática com a Godot. Aprenda as funcionalidades da Engine e faça seu jogo um sucesso.

Tutorial Space Shooter Godot: Parallax - Parte 2
Photo by Carl Raw / Unsplash

Perdeu a parte 1? Vem cá, o link tá aqui!

No post anterior falamos um pouco de preparação e planejamento, definimos quais seriam as características básicas do nosso jogo e indicamos algumas fontes de assets gratuitos para usarmos no nosso jogo.

Nós também falamos sobre os primeiros passos para configurar o Godot para o jogo que vamos desenvolver. Definimos o mapeamento de algumas ações, formato de tela e máscara de apresentação de texturas.

Hoje, vamos começar à trabalhar no desenvolvimento de algumas cenas do nosso Space Shooter. Tá com dúvida em relação à alguns termos da Godot? Não vou entrar em detalhes aqui, mas acho que você vai entender melhor colocando a mão na massa. Então bora começar a nossa jornada de hoje:

Passo 2 - Parallax Background

Aprenda a criar um fundo de parallax estelar que dará profundidade à sua aventura espacial.

Para exemplificar esse efeito, criaremos uma composição de animações de imagens com fundo estrelado rolando suavement de cima pra baixo. Também queremos que tal fundo dê a impressão de que temos estrelas mais próximas e mais distantes, com cada uma das camadas se movendo em uma velocidade diferente. Isso que eu descrevi se chama Parallax e é o que vamos fazer hoje.

Quando você executar seu jogo pela primeira vez (tecla F5 do seu teclado), o que você quer ver? Bom... se você fizer isso agora, antes de seguir o que vou explicar aqui, vai ver só uma tela cinza de 540 px x 960 px sem nada nela. Esta é a tela padrão do Godot, qualquer imagem de fundo ou imagem animada, sempre vai exigir que o desenvolvedor faça alguma coisa para mudar tal tela.

Mas, antes de começar à fazer o Parallax, vamos mapear mais duas ações que não foram mapeadas da última vez, vamos chamar elas de quit e reset e elas farão a saída e reinício do jogo respectivamente, com o acionamento de uma única tecla cada uma delas. Se está com dúvida de como isso é feito, dá uma olhada no post anterior dessa série, no final você deve ficar com o mapeamento desta forma:

Mapeamento das funções de quit e reset.

Uma vez mapeadas as funções, precisamos criar o código que será responsável por chamar as ações quando tais funções forem acionadas. Será nosso primeiro código, então vamos devagar. Primeiro, com a cena Game selecionada, clique no ícone de um pergaminho com um sinal de mais para associar um script.

Crie uma pasta para organizar os scripts separados das cenas e assets. Vamos chamar esta pasta de scripts, mas você pode dar o nome que quiser.

Criação da pasta de scripts.
💡
Importante:
A organização dos seus assets, scripts e cenas é bastante relevante especialmente para projetos grandes onde mais de uma pessoa esteja criando elementos do jogo.

Com a pasta criada, selecione o template para a criação do seu script e o nome do seu script. Neste caso vamos criar com o template vazio o script game.gd.

Definição do template, nome e local do script

No script criado, vamos incluir uma validação para checar se determinada tecla foi acionada dentro da função process, se a tecla ESQ definida para a ação de quit for pressionada vamos sair do jogo, se a tecla R for a tecla pressionada, vamos reiniciar a cena ativa, para isso esse será o script definido:

func _process(delta):
	if Input.is_action_just_pressed("quit"):
		get_tree().quit()
	elif Input.is_action_just_pressed("reload"):
		get_tree().reload_current_scene()
Script criado com a verificação das ações

Pra ver se o seu código está funcionando, execute a cena com o botão F5 e depois de aberta aperte o ESC, a tela do jogo deve fechar na sequencia. Por enquanto não dá pra testar a função de reset, mas você pode ver isso depois desse capítulo do tutorial.

Enfim, vamos para o que tínhamos planejado para esse capítulo, né?

Para criar o efeito de parallax no Godot, você vai precisar de 3 nós diferentes:

  • ParallaxBackground;
  • ParallaxLayer;
  • Sprite2D.
Sela de seleção de nós

O ParallaxBackground funciona como um nó agrupador, tendo os nós ParallaxLayer's como filhos. Este nó será o responsável por criar o efeito de movimento do fundo.

Você pode ter mais de um ParallaxLayer, cada um deles se movendo em uma velocidade diferente para dar a impressão de profundidade. Este nó só define a camada, a imagem desta camada precisa ser adicionada como um Sprite2D filho.

Nos assets do Kenney que baixamos, temos algumas imagens de background. selecionei um fundo roxo com estrelas como o Sprite 2D da camada mais ao fundo. Neste Sprite2D vamos configurar as seguintes informações:

  • Desmarcar a opção de centered no Offset;
  • Habilitar a opção de Region, definindo a largura e altura como a viewport;
  • Habilitar a opção de Repetição da textura.
Definição das configurações do Sprite2D

Também criei uma segunda camada com um sprite composto por uma imagem de fundo transparente e estrelas brancas (esta imagem não faz parte dos assets baixados, você pode usar qualquer ferramenta de pixel art para criar tal imagem).

Com o Parallax Layer selecionado, através do Inspetor defina o espelhamento (mirroring) vertical na mesma altura definida na viewport e a escala do movimento (motion > scale) de acordo com a camada que estiver trabalhando.

No nosso caso estou definindo a camada mais profunda com 0.3 e a mais próxima como 1, isso fará com que a camada "do fundo" se desloque mais devagar que a "mais próxima" do jogador.

Definição de mirroring e motion scale.

Por último para fazer o movimento acontecer, temos que ajustar o script incluindo uma linha de código alterando a posição do offset do ParallaxBackgroud, as camadas vão se mover tomando como referência este offset e a escala de movimento.

A escala de movimento multiplica o offset definido no ParallaxBackground e faz com que este movimento vá mais rápido ou devagar, conforme definido no ParallaxLayer. Uma escala menor faz com que o movimento seja mais lento, uma escala maior que seja mais rápido.

Vamos incluir as seguintes informações no script:

  • Uma variável para definição da velocidade de rolagem;
  • Uma variável de referência do ParallaxBackground;
  • Uma linha de código na função process parra variar o scroll_offset

Conforme indicado abaixo:

...
@onready var parallax_background = $ParallaxBackground
var scroll_speed = 100.00

func _process(delta):
...	
	parallax_background.scroll_offset.y += delta * scroll_speed
Ajustes do script do game com as variáveis e movimento do parallax.

E finalmente temos o efeito de Parallax funcionando no fundo do seu jogo!!! Você pode testar seu jogo pela tecla F5. Também dá pra testar as funções de reset e quit que definimos antes, com as teclas R e ESC.

Parallax funcionando!

O que você achou? Difícil ou fácil? Muito complicado encontrar as coisas na Engine? E a sintaxe da linguagem GDScript? Deixe seu feedback para melhorarmos a explicação para os próximos capítulos, tá legal?

Hoje vamos ficar por aqui, na próxima semana, vamos criar o nosso Player, colocar ele na nossa cena do jogo, fazer suas lógicas de movimentação e definir a sua máscara de colisão. Já deixa anotado aí na sua agenda pra não perder.