Adicionando funcionalidades ao jogo
Se cada evento for descrito no nível de detalhes que fizemos antes, este tutorial ficaria muito extenso. Vamos fazer uma descrição um pouco mais resumida para os próximos eventos. Lembre-se dos passos para adicionar uma condição ou ação:
1. Duplo clique para inserir um novo evento, ou clique no link Add action para adicionar uma ação;
2. Duplo clique no objeto que contém a condição/ação;
3. Duplo clique na condição/ação que você deseja;
4. Insira os parâmetros, se necessários.
De agora em diante, os eventos serão descritos pelo objeto, seguido pela condição/ação, seguido pelos parâmetros. Por exemplo, o evento que acabamos de inserir poderia ser descrito da seguinte maneira:
Adicionar condição System -> Every tick
Adicionar ação Player -> Set angle towards position -> X: Mouse.X, Y: Mouse.Y
Fazendo o jogador atirar
Quando o jogador clicar com o mouse, ele deverá atirar um projétil. Isto pode ser feito pela ação Spawn an object (desovar um objeto) no objeto Player, o que irá criar uma nova instância de um objeto na mesma posição e ângulo. O Bullet movement que adicionamos mais cedo fará com que ele vôe para frente.
Crie o seguinte evento:
Condição: Mouse -> On click -> Left clicked (botão esquerdo)(é o padrão)
Ação: Player -> Spawn another object -> Para o Objeto selecione Bullet. Para a Layer coloque 1 (A camada principal "Main" é a layer 1 - lembre-se que o Construct 2 faz a contagem do 0). Deixe 0 o campo Image point (ponto da imagem).
Seu evento de se parecer com isso:
Se você executar o jogo irá notar que as balas são atiradas do meio do jogador ao invés da ponta da arma. Vamos corrigir isso colocando um image point na ponta da arma. (um ponto da imagem é apenas uma posição na imagem de onde você pode lançar objetos).
Clique com o botão direito no objeto Player na barra de projeto ou na barra de objetos e selecione Edit animations (editar animações).
O editor de imagens para o jogador reaparece. Clique nas ferramentas Origin (origem) e Image Points (pontos da imagem):
... e o diálogo de pontos da imagem é aberto:
Note que a origem do objeto é exibida como um ponto vermelho. Esse é o "hotspot" ou "ponto pivô" do objeto. Se você rotacionar o objeto, ele gira sobre a origem. Nós queremos adicionar outro ponto de imagem para representar a arma, então clique no botão vermelho Add (adicionar). Um ponto azul é exibido - este é nosso novo ponto da imagem (image point). Clique com o botão esquerdo na ponta da arma do jogador para colocar o ponto de imagem ali:
Feche o editor de imagens. Duplo clique na ação Spawn an object (lançar um objeto) que criamos anteriormente e mude o Image Point para 1. (A origem será sempre o primeiro ponto da imagem e lembre-se que o Construct 2 faz a contagem do zero). O evento deve se parecer com o que você vê abaixo - note que ele diz Image point 1 agora:
Execute o jogo. As balas agora são atiradas da ponta da nossa arma! Apesar disso, os projéteis ainda não fazem nada. Esperamos, no entanto, que você começe a perceber que uma vez que se familiarizar com o sistema de eventos você pode adicionar funcionalidades muito rapidamente.
Vamos fazer as balas matarem os monstros. Adicione o seguinte evento:
Condição: Bullet -> On collision with another object (ao colidir com outro objeto) -> selecione o objeto Monster.
Ação: Monster -> Destroy (destruir)
Ação: Bullet -> Spawn another object -> Explosion, layer 1
Ação: Bullet -> Destroy
O efeito de explosão
Execute o jogo e tente atirar nos monstros. Oops, a explosão tem um borda preta grande!
Você pode ter previsto isso desde o início e se perguntou se o seu jogo realmente ficaria desse jeito! Não se preocupe, não vai. Clique no objeto Explosion na Object bar (barra de objetos) (que fica no canto inferior direito) ou na Project bar (barra de projeto) (que está tabulado com a barra de camadas). Suas propriedades aparecem na Properties bar (barra de propriedades) no lado esquerdo. Na parte inferior, configure a propriedade Blend mode (modo de mistura) para Additive (aditivo). Agora teste o jogo novamente.
Por que isso funciona? Sem entrar nos detalhes, as imagens comuns são coladas no topo da tela. Com o efeito aditivo cada pixel é adicionado (somado) com o pixel do plano de fundo por trás dele. A cor preta equivale a um valor de zero pixel, então nada é somado - você não vê o plano de fundo preto. Cores mais brilhantes adicionam mais valores, então aparecem com mais força. É ótimo para efeitos de explosão e de luz.
Fazendo monstros mais espertos
Por enquanto os monstros apenas passeiam para a direita pra fora do layout. Vamos torná-los um pouco mais interessantes. Primeiro de tudo, vamos iniciá-los com um ângulo aleatório.
Condição: System -> On start of Layout (no início do layout)
Ação: Monster -> Set angle (define o ângulo) -> random(360)
Eles ainda vão passear eternamente quando saem do layout e nunca mais serão vistos. Vamos mantê-los dentro do layout. O que vamos fazer é apontá-los de volta para o jogador quando deixarem o layout. Isto fará duas coisas: eles sempre vão ficar dentro do layout e se o jogador ficar parado os monstros virão direto pra ele!
Condição: Monster -> Is outside layout (está fora do layout)
Ação: Monster -> Set angle toward position -> Para X, Player.X e para Y, Player.Y
Rode o jogo. Se você esperar um tempo irá notar que os monstros também ficam em torno do layout e vão em todas as direções. Não chega a ser uma Inteligência Artificial - IA, mas vai servir!
Agora vamos supor que queremos que o monstro morra após atirarmos cinco vezes nele, em vez de morrer instantaneamente como está acontecendo. Como fazemos isso? Se armazenarmos apenas um contador de "Health" (vida) então ao atingir o monstro cinco vezes todos os monstros irão morrer. Dessa forma precisamos que cada monstro tenha sua própria vida. Podemos fazer isso com instance variables (variáveis de instância).