quinta-feira, 19 de abril de 2012

Colisão e IA

Nessa semana foi adicionado ao programa a Colisão entre as partes, o tipo de colisão é a AABB que pode ser vista no código abaixo:


public bool IsColliding(Vector2 posA, Rectangle sizeA, Vector2 posB, Rectangle sizeB)
        {
            bool is_objA_to_left_of_objB = posA.X + sizeA.Width < posB.X;
            bool is_objA_to_right_of_objB = posA.X > posB.X + sizeB.Width;
            bool is_objA_above_objB = posA.Y + sizeA.Height < posB.Y;
            bool is_objA_below_objB = posA.Y > posB.Y + sizeB.Height;

            return !(is_objA_to_left_of_objB || is_objA_to_right_of_objB || is_objA_above_objB ||                                                                                                                                                               is_objA_below_objB);
        }

A IA foi implementada para o Inimigo_01, o inimigo tem um campo de visão, se esse campo não colidir com o Jogador o inimigo segue o seu movimento natural, se ocorre a colisão, o inimigo segue as coordenadas X e Y do Jogador.

Trecho da IA:


if (!Colisao_Personagem_Campo_Visao)
            {
                if (Pos_Inimigo_01.X >= 200 && Inimigo_01_Andando_Esquerda)
                {
                    Pos_Inimigo_01 = Inimigo_01.Position;
                    Pos_Inimigo_01.X -= 1;
                    Inimigo_01.Position = Pos_Inimigo_01;
                }
                else if (Pos_Inimigo_01.X < 660)
                {
                    Pos_Inimigo_01 = Inimigo_01.Position;
                    Pos_Inimigo_01.X += 1;
                    Inimigo_01.Position = Pos_Inimigo_01;
                    Inimigo_01_Andando_Esquerda = false;
                }
                if (Pos_Inimigo_01.X >= 660)
                {
                    Inimigo_01_Andando_Esquerda = true;
                }
            }

Nenhum comentário:

Postar um comentário