quinta-feira, 17 de maio de 2012

Atualização 17-05

Desde a semana passada, pouca coisa mudou no jogo, foi acrescentado um cenário e melhoradas algumas partes do código que estavam dando alguns bugs na animação, a cara do jogo nesse momento está assim:


Estamos enfrentando alguns problemas na atualização do HP, mas o mesmo deverá ser resolvido essa semana. O HUD também está sendo construído e em algumas semanas já estará implementado.


quinta-feira, 10 de maio de 2012

Atualização 10-05

Essa semana o código passou por uma refatoração e as classes estão totalmente separadas e funcionando corretamente, o visual nesse momento está assim:


Foi adicionado um texto para "Debug" assim poderíamos verificar se as variáveis estão funcionando corretamente.

Algumas alterações na animação ocorreram, a animação do ataque ficou assim:



A animação da "morte" ficou assim:


E foi adicionado um inimigo (Inimigo01), o qual é possível ver na primeira imagem (personagem Cinza).

terça-feira, 1 de maio de 2012

HP, Colisão, Classes

HP

Essa semana foi implementado o HP, parte visual, no inimigo e no jogador principal. A perda do HP ocorre nas seguintes situações:

- O jogador colide com o inimigo e perde 25.
- O jogador colide com o inimigo, mas está atacando, o inimigo perde 25.

Essa perda é somente visual, ao inicializar o HP, é desenhado na tela -25 na posição atual do objeto e esse valor vai mudando sua posição em Y a cada update em um determinado tempo; ao fim desse tempo o -25 não é mais desenhado na tela.

Colisão

O código da colisão foi melhorado, ao ocorrer a colisão, ele fará a verificação de quem está perdendo HP, o objeto que está perdendo o HP recuará 100 pixels, não importando a posição e ordem dos objetos, por exemplo, se o jogador está sofrendo o ataque ele fará o seguinte calculo: 

             if (Colisao_Personagem_Inimigo_01 && !Personagem_Esta_Atacando)
            {
                Pos_Personagem = Jogador_Principal.Position;

                if (Personagem_esta_a_esq)
                {
                    Pos_Personagem.X = Pos_Personagem.X - 100;
                }
                else
                {
                    Pos_Personagem.X = Pos_Personagem.X + 100;
                }
                Jogador_Principal.Position = Pos_Personagem;
             }

Organização das classes

Estamos enfrentando alguns problemas para separar todas as classes, primeiramente o código foi feito todo no Game1.cs, assim era possível testar se o código estava funcionando corretamente. Ao separar as classes encontramos um problema, ele não está atualizando as posições dos "Vector2", por exemplo, na classe IA.cs, o inimigo começa na posição (660, 175) e vai diminuindo em 1, em X, a cada Update, ao chegar na posição (200,175) o inimigo deve aumentar em 1, em X, na classe Game1.cs o código funciona perfeitamente, porém ao fazer a adaptação na classe IA.cs, o inimigo vai diminuindo 1, em X, "eternamente", esse foi o problema principal encontrado e estamos trabalhando para remover esse Bug.


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;
                }
            }

quinta-feira, 5 de abril de 2012

Teste da animação do Personagem

Após algumas conversas optamos pelo método "Entity" para realizar as animações do jogo, seja do personagem, inimigos, objetos ou até mesmo o Background.

O programa foi todo realizado no Game1.cs, pois os testes seriam mais confiáveis, e os resultados mais próximos do desejado. Não usamos os sprites originais ainda, pois estes ainda estão em desenvolvimento.

Estado "Idle"



Estado "Walk"



















Estado "Jump"


quarta-feira, 4 de abril de 2012

SVN e parte Gráfica

  Enfrentando alguns problemas para continuar com a programação devido à problemas relacionados ao SVN, assim que for resolvido será implementado as outras classes. A parte gráfica já foi iniciada, alguns esboços do personagem foram feitos.