
A comunidade brasileira de desenvolvimento e programação de jogos. |

|
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| O que você achou do tutorial |
| Bom... |
|
0% |
[ 0 ] |
| Ruim... |
|
100% |
[ 1 ] |
|
| Total de Votos : 1 |
|
| Autor |
Mensagem |
| lulukiller95 Membro júnior
| | Registrado em: Terça-Feira, 11 de Novembro de 2008 | | Mensagens: 21 | |
|
Enviada: Sáb Jun 12, 2010 5:40 pm Assunto: Tutorial Movimentação e Colisão no Delphix |
|
|
Movimentaçao E Colisão
Bem, Depois de vários Meses de tentativas e Erros finalmente consegui criar um Simples jogo de uma bola andando pela tela e colindindo com outra bola.
AGRADECIMENTOS
Queria agradecer ao:
Maarten Von Gompel utilizei seu exemplo para movimentar a bolinha
Guirro da UNIDEV utilizei seu tópico consertando algumas coisas...
Primeiros Passos
Primeiro vamos fazer o form deixe o exatamente como o da imagem:
Configure do jeito que você quiser, Afinal o projeto é seu...
Configure os componentes do Delphix, e depois adicione os seguintes objetos ao seu DXImageList1:
+bola
+bolawall
bola:= Será nosso Sprite, o que controlaremos
bolawall:= Será o Sprite no qual iremos colidir como uma parede
Vou disponibilizar no final do Tutorial os sprites que eu utilizei se não quiser utilliza-los qualquer outro sprite serve(recomendo 32x32).
Feito Isso vamos para a parte de programção
Programação
Vamos declarar aagora as classes de nossas bolinhas:
| Código: |
TMySprite = class(TImageSprite)
public
procedure DoMove(MoveCount: Integer); override;
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
end;
TWallSprite = class(TImageSprite)
end;
|
Não se esqueça de colocar na var o nome curto da bolinhas
ex:
| Código: |
var
Form1: TForm1;
Sprt: TMySprite;
Wall: TWallSprite;
|
agora no evento FormKeyPress do seu TForm coloque:
| Código: |
If Ord(Key) = 27 then Form1.Close;
|
Isso fará com que feche o programa ao apertar a tecla ESC
agora, no evento DXDraw1Initialize:
| Código: |
DXTimer1.Enabled:= True; |
e no DXDraw1finalize
| Código: |
DXTimer1.Enabled:= False;
|
No Evento DXTimer1Timer coloque:
| Código: |
DXInput1.Update;
DXDraw1.Surface.Fill(0);
DXSpriteEngine1.Move(1);
DXSpriteEngine1.Dead;
DXSpriteEngine1.Draw;
DXDraw1.Flip;
Label1.Caption:= FloatToStr(Sprt.X);
Label2.Caption:= FloatToStr(Sprt.Y);
Label3.Caption:= IntToStr(DXTimer1.FrameRate);
|
Explicaçoes:
Nos eventos DXDraw1Initialize, DXDraw1Finalize e DXTimer1Timer damos instruções para o computador iniciar e finalizar corretamente o DirectX para finalizar e iniciar etc.
Agora Vamos definir as propiedades das nossas bolinhas no evnto do TForm1.FormCreate
| Código: |
Sprt := TMySprite.Create(DXSpriteEngine1.Engine);
Sprt.Image:=DXImageList1.Items.Find('bola');
Sprt.X:=100;
Sprt.Y:=100;
Sprt.Width:=Sprt.Image.Width;
Sprt.Height:=Sprt.Image.Height;
Wall:= TEnemySprite.Create(DXSpriteEngine1.Engine);
Wall.Image:= DXImageList1.Items.Find('bolaenemy');
Wall.X:= 200;
Wall.Y:= 200;
Wall.Height:= Enemy.Image.Height;
Wall.Width:= Enemy.Image.Width;
|
Aqui definimosas propiedades básicas das nossas bolinhas tais quais:
Imagem
posiçao
altura
largura
etc
Finalmente chegamos a nossa reta final
Reta Final
Essas Duas partes são as mais Importantes, pois é o que realmente o tutorial quer mostrar
primeiro vamos colocar a procedure que irá movimentar a bolinha:
| Código: |
If isUp in Form1.DXInput1.States then
Y := Y - algo;
If isDown in Form1.DXInput1.States then
Y := Y + algo;
If isLeft in Form1.DXInput1.States then
X := X - algo;
If isRight in Form1.DXInput1.States then
X := X + algo;
If X > Form1.DXDraw1.SurfaceWidth Then X := 1;
If Y > Form1.DXDraw1.SurfaceHeight Then Y := 1;
If X <= 0 Then X := Form1.DXDraw1.SurfaceWidth - 1;
If Y <= 0 Then Y := Form1.DXDraw1.SurfaceHeight - 1;
collision;
|
Aqui demos instruções para movimentar a bolinha:
+Pegamos uma informação do DXInput(isUp,isRight etc)
+Definimos condições de movimento da bola tais: se o X for maior que a superfcie do DXDraw ele deve voltar ao ínicio da tela, por exemplo
OBS: algo:= quer dizer quantos pixels ele se movimenta e assim definimos a velocidade.
Agora Irei Revelar o código que o Guirro postou na UNIDEV e eu o modifiquei:
no evento de DoCollision coloque:
| Código: |
if Sprite is TWallSprite then
if isDown in Form1.DXInput1.States then
begin
Y:= Sprt.Y - 1;
end;
if isUp in Form1.DXInput1.States then
begin
Y := Sprt.Y + 1;
end;
if isRight in Form1.DXInput1.States then
begin
X := Sprt.X - 1;
end;
if isLeft in Form1.DXInput1.States then
begin
X := Sprt.X + 1;
end;
|
Aqui colocou-se as instruçoes para se colidir e o jogador continuar a mandar a informação de movimento o que o computador deve fazer:
+Verifica se o usuario esta mandando a iformaçao de por exemplo descer a bola de ve se movimentar para Y:= Antigo Y -1pixel assim colide perfeitamente!
Considerações Finais
Bom espero que você tenha aprendido essa maneira de fazer um objeto se mover e colidir, é lógico que você agora pode fazer alguma coisa, portanto retire aquele seu projeto guardado no ármario a muito tempo e faça lguma coisa
Obrigado Por Ter lido meu tutorial, não se esqueça de votar na enquete!
[link dos sprites e o executável]
http://www.mediafire.com/?e5imzzo5mhz |
|
| Voltar ao Topo |
|
 |
| Tydres Moderador
 | | Registrado em: Domingo, 20 de Mai de 2007 | | Mensagens: 1041 | | Localização: Em algum código fonte... |
|
Enviada: Seg Jun 14, 2010 1:25 pm Assunto: |
|
|
Muito bom. Exelente Colaboração.
Movido para "Movido para Tutoriais de Programação" _________________
 |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibído. Responder Tópicos Proibído Editar Mensagens: Proibído. Excluir Mensagens: Proibído. Votar em Enquetes: Proibído.
|
|