AI Inimigos Plataforma - 2/5/2015

2

Tagged

Attached Files

The following files have been attached to this tutorial:

.capx

platformer-ai-tutorial.capx

Download now 183.03 KB

Stats

1,621 visits, 1,804 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.

UPDATE - 2/5/2015

O arquivo agora fixa a animação "Idle" não sendo alterada se a animação "Idle" não for ordenada primeiro nas animações do Inimigo

UPDATE - 2/5/2015

Eu sempre vejo pessoas perguntando como codificar inimigos básicos que "patrulham" uma área e / ou inimigos básicos que o seguem quando você está perto deles e atacam quando você está quase ao lado deles.

Gostaria de compartilhar meu método.

Crie uma instância var para inimigos chamada IA (tipo Number), o valor inicial é 0

ANDAR ALEATORIAMENTE PARA DIREITA OU PARA ESQUERDA

IA = 0

Every 2 secs,

For Each: Enemy

-> Set enemy to Idle animation

-> Set AI to choose(1,2)

ANDAR A DIREITA

IA = 1

For Each: Enemy

-> Simulate enemy "Right"

-> Set enemy to walk animation

-> Set enemy Not Mirrored

->Set Platform: Max Speed to 50

ANDARA A ESQUERDA

IA = 2

For Each: Enemy

-> Simulate enemy "Left"

-> Set enemy to walk animation

-> Set enemy Mirrored

->Set Platform: Max Speed to 50

MUDAR SENTIDO PARA A DIREITA

Inimigo tem uma parede a esquerda

For Each: Enemy

-> Set IA to 1

MUDAR SENTIDO PARA A ESQUERDA

Inimigo tem uma parede a direita

For Each: Enemy

-> Set IA to 2

Isso é uma IA básica. Você pode definir IA = 3 para correr para a direita, 4 para correr para a esquerda, 5 para o ataque, 6 para ferir, etc se você quiser uma IA mais complexa.

Para correr e atacar, sugiro usar uma variável para armazenar cada marca de distância entre você e cada inimigo para que cada inimigo calcule sua própria distância de você, então use essa variável de distância para determinar quando o inimigo atacará (por exemplo, X <50 Quando atacar de perto, x> 150 quando atacar de longe). Diferenciar Correr de Caminhar pela velocidade (ajuste tanto a velocidade máxima quanto o vetor x para correr como para caminhar). Claro que as animações de Run e Walk devem ser diferentes, ou pelo menos diferentes na velocidade de animação.

Crie uma variável de instância chamada EnemyXDistance e EnemyYDistance

CÁLCULO DE DISTÂNCIA

Every Tick

For Each: Enemy

->Set EnemyXDistance to abs(Enemy.X-Player.X)

->Set EnemyYDistance to abs(Enemy.Y-Player.Y)

Eu decidi fazer variáveis ​​de distância X e Y, porque haverá vezes que você também precisa da distância Y (por exemplo, se o ataque é para cima, ou quando você quer ataques apenas quando eles estão perto de você, eixos verticais corretos). Lembre-se, o cálculo de distância que colocamos nas variáveis ​​de instância foi calculado usando o "abs", o que significa que ele não nos diz se o inimigo está à esquerda, à direita, acima ou embaixo do jogador. Para essa questão, precisamos usar uma condição adicional (Compare X and/or Compare Y) como mostrado abaixo:

Correr para a direita

IA = 3

-> Simulate enemy "Right"

-> Set enemy to walk animation

-> Set enemy Not Mirrored

->Set Platform: Max Speed to 100

Correr para a esquerda

IA = 4

-> Simulate enemy "Left"

-> Set enemy to walk animation

-> Set enemy Mirrored

->Set Platform: Max Speed to 100

QUANDO CORRER P/ DIREITA

EnemyXDistance> 20

EnemyXDistance <100

EnemyYDistance <20

Enemy.X <Player.X <--- isso significa que o inimigo está no lado esquerdo do jogador

For Each: Enemy

->Set IA to 3

QUANDO CORRER P/ ESQUERDA

EnemyXDistance> 20

EnemyXDistance <100

EnemyYDistance <20

Enemy.X> Player.X <--- isso significa que o inimigo está no lado direito do jogador

For Each: Enemy

->Set IA to 4

EnemyYDistance <20

^

Eu usei esta condição acima para fazer o inimigo correr se jogador está em 20 ou menos. Isso significa que você dá um pouco de margem para o cálculo da distância. Também significa que os inimigos podem correr em caminhos / pisos angulados (se houver) quando a distância do jogador for 20 ou menos.

A coisa boa sobre este método é que você pode expandir seu sistema de IA atribuindo/adicionando um novo valor para a IA e você não precisa recodificar completamente os códigos mais antigos (você só faria pequenas mudanças se houver necessidade disso). Então, se você quer um salto, um teletransporte, ferimento/dano, ou qualquer outra coisa que possa acontecer com seus inimigos, basta atribuir um novo valor que você ainda não usou.

Como IA = 0 é o valor padrão onde você faz o inimigo andar (para esquerda ou para direita), sempre defina a IA de volta para 0 depois de fazer algo (após o ataque, após a animação acabar, após o teletransporte, etc. ou qualquer outra ideia).

Recapitular:

Valores IA

0 = Idle (andar aleatoriamente para esquerda ou direita)

1 = Andar para a Direita

2 = Andar para a Esquerda

3 = Correr para a direita

4 = Correr para a esquerda

Opcional:

5 = Saltar

6 = Ferimento / Dano

7 = Ataque

8 = Guarda / Bloqueio

9 = Teleporte

e assim por diante.

Lembre-se sempre de usar " For Each: Enemy " em cada evento da IA para fazer cada inimigo se comportar independentemente de outras instâncias de inimigos.

Pergunta:

Então, como IA = 7 pode ser usado para diferentes ataques (por exemplo, o ataque 1 é um soco e ataque 2 é atirando balas)?

Resposta:

Vou atualizar este tutorial explicando como implementá-lo. Verifique este tutorial de vez em quando.

Eu tentarei fazer um capx no meu tempo livre o mais rápido possível, mas vocês podem experimentar. É mais fácil aprender quando você faz os códigos você mesmo. Isto é apenas o básico em IA e é bastante simples.

Por favor favorite este tutorial se isto o ajudou.

Por favor, comente se você tiver algum problema. Vou tentar ajudar o máximo que puder.

.CAPX

platformer-ai-tutorial.capx

Download now 183.03 KB
  • 0 Comments

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