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.