Como fazer um jogo de plataforma

12

Index

Tagged

Contributors

Stats

150,641 visits, 191,811 views

Tools

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 30 Apr, 2017. Last updated 25 Feb, 2019

Adicionando um inimigo

Espero que você esteja familiarizado com o processo de adição de sprites e animações agora. Assim, para a concisão os passos na íntegra não serão repetidos. Vamos adicionar um novo sprite para um inimigo.

1. Adicione um novo objeto Sprite no layout.

2. Importe a faixa de sprite Enemies \ Snail .

3. Elimine o primeiro quadro de animação vazio.

4. Defina a animação para looping, velocidade 15.

5. Defina a origem para a base da imagem do caracol e aplique-a a toda a animação.

6. Cortar todos os quadros (shift + crop).

7. Feche o editor de animação e mude o nome do objecto para 'SnailEnemy'.

8. Coloque-o sobre uma placa de terra como mostrado.

Agora, queremos implementar a seguinte lógica:

- Se o jogador bater de frente como caracol de lado, eles piscam e se machucam.

- Se o jogador saltar sobre o caracol, o caracol será morto.

Para fazer o jogador piscar, seleccione o player e adicione o comportamento (behavior) Flash. Lembre-se de selecionar o jogador real, não o objeto PlayerBox (já que é o jogador visível que queremos piscar). Vamos usar a ação 'Flash' deste comportamento em um momento.

Alterne para a folha de eventos e adicione um novo evento:

PlayerBox -> On collision with another object -> SnailEnemy

Este evento é executado quando nós colidimos com o SnailEnemy de qualquer ângulo. Podemos então usar sub-eventos para testar se o jogador está pulando em cima ou a colisão é de algum dos lados. Vamos primeiro testar se o jogador está acima.

Adicione um sub evento ao evento de colisão:

PlayerBox -> Is falling

Devemos também testar o jogador está realmente em cima do inimigo. Isso pode evitar que o caracol seja acidentalmente morto se caímos por uma borda. Clique com o botão direito do mouse a condição "Is falling" e selecione "Add another condition". Lembre-se de que todas as condições devem ser atendidas para que o evento seja executado. Adicione a condição:

PlayerBox -> Compare Y -> Less than, SnailEnemy.Y

O eixo Y aumenta de cima para baixo, portanto, se a coordenada Y do jogador é menor que a do caracol, eles está acima dele.

Neste evento, adicione a ação:

SnailEnemy -> Destroy

Podemos também fazer o jogador quicar sobre o caracol, adicionando uma outra ação:

PlayerBox -> Set vector Y -> -700

'Set vector Y' basicamente define a velocidade vertical do movimento da plataforma; Configurando-o para um valor negativo define-o para cima (novamente, o eixo Y aumenta para baixo), e 700 é um pouco menor do que a força de salto de 1100. Então isso fará o jogador saltar como se ele desse um salto fraco.

Não terminamos: clique com o botão direito do mouse na margem do evento "Is falling" (o espaço logo à esquerda do ícone PlayerBox) e selecione Add -> Else. 'Else' é uma condição especial que é executada se o evento anterior não foi executado. Então, este evento será executado se colidimos com o caracol, mas nós NÃO pulamos em cima dele - foi uma colisão lateral. Neste evento, queremos que o jogador se machuque. Adicionar a ação

Player -> Flash -> (deixe valores padrão e clique em Done)

Lembre-se de que o comportamento Flash está no objeto Player, não no PlayerBox.

OK, então o jogador nunca vai morrer, ele vai apenas piscar. Mas temos a detecção de se eles pulou em ou bateu em algum lado. Este tutorial não irá cobrir todos os sinos e assobios, mas espero que você possa criar efeitos de morte (tente criar um sprite 'poof' para SnailEnemy quando ele é destruído, usando a ação SnailEnemy 'Spawn objeto') e como tirar a saúde (no evento de piscar do jogador - você pode aprender sobre a saúde usando variáveis de instância no tutorial top-down shooter tutorial que você pode querer dar uma olhada depois).

Vamos fazer o inimigo do caracol se mover para frente e para trás através da plataforma.

Movendo o inimigo

O principal problema com a movimentação do caracol é como detectar quando ele atinge a borda de uma plataforma. A maneira mais fácil de fazer isso é com marcadores invisíveis nas bordas. Estes são apenas sprites invisíveis que irão mudar a direção do caracol quando ele colide com os marcadores.

Podemos novamente usar o comportamento de Plataforma para o caracol. Isto é conveniente porque:

- pode movê-lo para a esquerda e para a direita.

- ele vai subir e descer encostas assim como o jogador pode.

- ele vai cair das bordas se você quiser que ele caia.

- se você quiser fazer um inimigo saltar, você pode fazer o inimigo saltar automaticamente também usando a ação "simulate control".

Adicione o comportamento Platform ao sprite SnailEnemy. Como não estamos usando animações complicadas neste objeto, podemos usar o comportamento da plataforma diretamente no objeto sem um objeto 'caixa' invisível. Observe que, se você estiver fazendo um jogo de plataforma diferente com inimigos com animações complicadas, você deve usar a mesma técnica de caixa que usamos no player.

Não queremos que o jogador controle o SnailEnemy - queremos controlá-lo automaticamente. Podemos fazer isso definindo a propriedade Default controls para No , usando a ação Simulate control . Como os caramujos também são muito lentos, defina Max speed para 50 e Acceleration e Deceleration para 100!

Também precisamos dos marcadores 'Edge'. Adicione um novo objeto Sprite e basta criar em um retângulo opaco. De o nome de EdgeMarker . O tamanho do objeto para 40 x 40 e definir a sua Initial visibility para Invisible, para deixar o objeto invisível no jogo. Coloque um em cada extremidade da plataforma do caracol: (não se esqueça que você pode criar uma nova instância segurando control + arrastando o objeto)

O caracol também precisa saber em que direção está se movendo - seja à esquerda ou à direita. Podemos fazer isso com instance variables do objeto. Se temos vários caracóis, eles armazenam suas variáveis de instância separadamente. Isso lhes permite ter valores únicos para sua saúde, direção atual, e assim por diante. Uma técnica simples para controlar inimigos automaticamente é criar uma variável de instância "action" que mantém seu estado atual. Por exemplo, poderia ser "run away", "chase player" ou "idle". Neste caso, só precisamos de "esquerda" e "direita", mas é útil configurá-lo da mesma maneira.

Selecione o objeto SnailEnemy. Na barra de propriedades, clique em Add / Edit em "Instance variables".

É exibida uma caixa de diálogo que lista todas as variáveis de instância do objeto. Clique no ícone 'Add' para adicionar um novo. Defina o nome como action, o tipo para text e o valor inicial para right (para se mover para a direita).

Clique em OK e feche a caixa de diálogo das variáveis de instância. Mude para a folha de eventos.

Queremos implementar a seguinte lógica:

- se action for "right", simule o movimento da plataforma segurando a tecla 'direita' para mover o caracol para a direita.

- se action for "left", simule o movimento da plataforma segurando a tecla de seta 'esquerda' para mover o caracol para a esquerda.

Também:

- se o caracol atinge o EdgeMarker , mude sua action (se "esquerda" defina-a para "direita", se "direita" defina para "esquerda").

Podemos configurar o movimento com os dois eventos a seguir:

Evento: SnailEnemy -> Compare instance variable -> action equal to "right" (use aspas duplas aqui para indicar o texto)

Ação: SnailEnemy -> Simulate control -> Right

Deve ser simples fazer o mesmo para a esquerda. Também queremos que a imagem espelha esquerda e direita como fizemos para o jogador. Então adicione SnailEnemy -> Set mirrored no evento "left", e SnailEnemy -> Set not mirrored no evento "right". Você deve terminar com isso:

Agora para virar a direção do caracol nos cantos:

Evento: SnailEnemy -> On collision with another object -> EdgeMarker

Subevent: SnailEnemy -> Compare instance variable -> action equal to "right"

Ação: SnailEnemy -> Set value -> action to "left"

Subevent: Else

Ação: SnailEnemy -> Set value -> action to "right"

É importante usar Else aqui, pois os eventos são executados de cima para baixo. Se em vez de 'else' dissemos 'action equal to "left'', observe que o evento anterior teria apenas configurado para isso. Então, ele estaria apenas se configurando novamente, sem efeito global. Usando 'else', evitamos que o segundo evento seja executado se o primeiro for verdadeiro.

Executar o projeto. Observe que o caracol está se movendo para a frente e para trás em sua plataforma. Isso torna um pouco mais difícil saltar sobre! Este é um sistema de "IA" muito rudimentar, mas espero que você possa imaginar que você poderia criar inimigos mais inteligentes, controlando o movimento com mais eventos, possivelmente até mesmo permitindo que eles caíam das bordas, ou usando outros marcadores para disparar um salto para fazer parecer que o inimigo saiba pular para uma plataforma.

Tente criar uma plataforma com dois caracóis nela. Observe que eles se controlam individualmente, já que cada um tem sua própria variável de instância action mantendo seu estado atual. Esperamos que você possa começar a ver como as variáveis de instância são importantes para controlar instâncias de forma independente - eles não têm que fazer exatamente a mesma coisa uns com os outros!

  • 0 Comments

Want to leave a comment? Login or Register an account!