AI Inimigos Plataforma - 2/5/2015

Tagged

Attached Files

The following files have been attached to this tutorial:

.capx

platformer-ai-tutorial.capx

Download now 183 KB

Stats

595 visits, 600 views

Tools

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 KB
  • 0 Comments

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