A comunidade brasileira de desenvolvimento e programação de jogos.
Bem-vindo: Qua Abr 14, 2021 11:26 am

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 2 mensagens ] 

O que você achou do tutorial
Bom... 83%  83%  [ 5 ]
Ruim... 17%  17%  [ 1 ]
Total de votos : 6
Autor Mensagem
 Título: Tutorial Movimentação e Colisão no Delphix
MensagemEnviado: Sáb Jun 12, 2010 5:40 pm 
Offline
Membro júnior

Registrado em: Ter Nov 11, 2008 4:33 pm
Mensagens: 22
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:
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 :wink:
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
 Perfil  
 
 Título:
MensagemEnviado: Seg Jun 14, 2010 1:25 pm 
Offline
Membro veterano
Avatar do usuário

Registrado em: Dom Mai 20, 2007 8:42 am
Mensagens: 1114
Localização: Belo Horizonte
Muito bom. Exelente Colaboração.

Movido para "Movido para Tutoriais de Programação"

_________________
Imagem


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 2 mensagens ] 

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Ir para:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB