A partir dessa aula você deverá baixar o projeto, pois muita coisa muda nessa segunda etapa. O que vimos atrás foi o básico do básico.
Sprite
Nessa aula o projeto contém 2 modulos e 1 form.
GameCore - Núcleo do jogo, onde estão as funções para desenho.
GameStruct - Estrutura de dados para os personagens entre outros.
Se quiser, não precisa deixar como a imagem acima apenas deve renomear os módulos e o form.
Agora eu digo ... "Bem, vamos começar a escrever os códigos para trabalharmos!"
No módulo GameStruct, vamos analisá-lo.
Direção de Animação, não usei constantes dessa vez. Usei uma enumeração.
Direção do Personagem, isso é para a informar a direção e não animação.
Na estrutura do personagem temos.
Name, nome do personagem.
Size, este é o tamanho da Sprite (32x64).
Position, coordenada X e Y.
Sprite, imagem do personagem.
Direction, direção do persongem.
Moving, está em movimento ou não.
As variáveis abaixo são apenas para a animação. Se cada jogador conter sua própria velocidade, podemos criar inúmeras situações entre PvE.
Anim, número correspondente a animação da Sprite.
AnimTime, variável para guardar o tempo da animação.
MoveTime, variável para guardar o tempo de movimento.
[Step], Step é uma palavra reservada do visual basic e não pode ser usada como variável ou objeto (For Next / Step). Nesse caso eu adicionei Colchetes para usar como variável.
E as últimas variáveis, o nome já indicam para que servem.
No Evento do Form, o KeyDown. Essas variáveis é para não apertar variás teclas ao mesmo tempo e atrapalhar a animação.
Não podemos esquecer da nossa saída do programa.
Ainda não adicionamos GameRunning, então vamos para o GameCore.
Perceba que agora temos duas novas modificações. GameSize e GetAsyncKeyState.
GameSize é o tamanho do nosso jogo. GetAsyncKeyState é uma função da API "user32.dll", ela retorna o pressionamento de teclas em modo asíncrono.
Isso eu explicarei depois. Agora nossas subs de desenho. Não posso mostrar a imagem toda, então aqui vai o code.
Parar diminuir a quantidade de códigos no GameLoop, crie estas duas subs.
DesenharNome
DesenharFPS
Movendo o personagem;
Quando DirUp é verdadeiro o código entre ele é executado.
Verifica se a tecla para cima foi pressionada.
Se foi pressionada, muda a direção do personagem para cima.
Se o personagem ainda não estiver no topo do form, ele pode andar.
Se estiver no topo do form ele não pode.
Se a tecla para cima não foi pressionada, personagem não se moverá.
Esta regra vale para todo o restante da sub.
Inicialização das imagens, nome e posição do personagem.
Inicialização do jogo e incremento de posição.
Sprite
Nessa aula o projeto contém 2 modulos e 1 form.
GameCore - Núcleo do jogo, onde estão as funções para desenho.
GameStruct - Estrutura de dados para os personagens entre outros.
Se quiser, não precisa deixar como a imagem acima apenas deve renomear os módulos e o form.
Agora eu digo ... "Bem, vamos começar a escrever os códigos para trabalharmos!"
No módulo GameStruct, vamos analisá-lo.
Direção de Animação, não usei constantes dessa vez. Usei uma enumeração.
Direção do Personagem, isso é para a informar a direção e não animação.
Na estrutura do personagem temos.
Name, nome do personagem.
Size, este é o tamanho da Sprite (32x64).
Position, coordenada X e Y.
Sprite, imagem do personagem.
Direction, direção do persongem.
Moving, está em movimento ou não.
As variáveis abaixo são apenas para a animação. Se cada jogador conter sua própria velocidade, podemos criar inúmeras situações entre PvE.
Anim, número correspondente a animação da Sprite.
AnimTime, variável para guardar o tempo da animação.
MoveTime, variável para guardar o tempo de movimento.
[Step], Step é uma palavra reservada do visual basic e não pode ser usada como variável ou objeto (For Next / Step). Nesse caso eu adicionei Colchetes para usar como variável.
E as últimas variáveis, o nome já indicam para que servem.
No Evento do Form, o KeyDown. Essas variáveis é para não apertar variás teclas ao mesmo tempo e atrapalhar a animação.
Não podemos esquecer da nossa saída do programa.
Ainda não adicionamos GameRunning, então vamos para o GameCore.
Perceba que agora temos duas novas modificações. GameSize e GetAsyncKeyState.
GameSize é o tamanho do nosso jogo. GetAsyncKeyState é uma função da API "user32.dll", ela retorna o pressionamento de teclas em modo asíncrono.
Isso eu explicarei depois. Agora nossas subs de desenho. Não posso mostrar a imagem toda, então aqui vai o code.
- Código:
Public Sub DesenharImagem(ByVal Imagem As Bitmap, ByVal X As Integer, ByVal Y As Integer)
g.DrawImageUnscaled(Imagem, X, Y)
End Sub
Public Sub DesenharImagem(ByVal Imagem As Bitmap, ByVal Posicao As Point)
g.DrawImageUnscaled(Imagem, Posicao)
End Sub
Public Sub DesenharImagem(ByVal Imagem As Bitmap, ByVal Screenrect As Rectangle)
g.DrawImage(Imagem, Screenrect)
End Sub
Public Sub DesenharImagem(ByVal Imagem As Bitmap, ByVal ScreenRect As Rectangle, ByVal ImageRect As Rectangle)
g.DrawImage(Imagem, ScreenRect, ImageRect, GraphicsUnit.Pixel)
End Sub
Parar diminuir a quantidade de códigos no GameLoop, crie estas duas subs.
DesenharNome
DesenharFPS
Movendo o personagem;
Quando DirUp é verdadeiro o código entre ele é executado.
Verifica se a tecla para cima foi pressionada.
Se foi pressionada, muda a direção do personagem para cima.
Se o personagem ainda não estiver no topo do form, ele pode andar.
Se estiver no topo do form ele não pode.
Se a tecla para cima não foi pressionada, personagem não se moverá.
Esta regra vale para todo o restante da sub.
Inicialização das imagens, nome e posição do personagem.
Inicialização do jogo e incremento de posição.