Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Dicas para criar seu jogo (3ª Competição de Programação)


Ryokusei
 Compartilhar

Posts Recomendados

Antes de começar a ler o tutorial, siga essas regras abaixo à risca:

 

- Se você é iniciante saia desta página agora,

- Se você tem dúvidas idiotas saia desta página agora,

- Se você não sabe utilizar propriedades e eventos de objetos e controles saia desta página agora,

- Se você pensa em agradecer dizendo "vlw lesk mt bom. e noiz mano zika flww" saia desta página agora,

- Se você pensa em reclamar porque deu erro na hora de compilar saia desta página agora,

- Se você não gosta de gatinhos, ou não é emo, ou não gosta de emos saia desta página agora.

 

Todos os conceitos aqui abordados valem para todas as linguagens e janelas.

 

Vamos nos divertir agora.

 

Todo controle gráfico possui propriedade Top e Left. Essas propriedades atuam definindo a posição do seu objeto no eixo da coordenada (y, vertical) e abscissa (x, horizontal) respectivamente.

No entanto o plano cartesiano possui o eixo da coordenada invertido, ou seja, quanto mais para cima menor é o valor.

 

468ce1f160736048986e35f966850a66.png

 

Além das propriedades Top e Left, também existem as propriedades Width e Height, que definem sua largura e altura respectivamente.

Tendo essas quatro propriedades em mãos, podemos controlar nosso objeto no Form.

Por exemplo, para saber se sua imagem Image1 está dentro ou fora da tela ela precisa atender a essas requisições:

 

- Left maior ou igual a zero,

- Soma de Left e Width menor ou igual a largura do Form,

- Top maior ou igual a zero,

- Soma de Top e Height menor ou igual a altura do Form.

 

Para verificar se seu objeto Image1 está dentro ou fora do Form, use o seguinte code:

 

É necessário se cadastrar para acessar o conteúdo.

 

Lembre-se que seu objeto é sempre um quadrilátero, mesmo que ele tenha um desenho redondo. Se quiser fazer um controle preciso conforme o contorno dos pixels de sua imagem o problema é seu, faça uma varredura do contorno e verifique isso. Embora seja trabalhoso, dá uma aparência melhor.

 

No seu jogo você precisa controlar as colisões entre seu jogador e as plataformas, obstáculos, inimigos, etc. Isso seria muito chato, trabalhoso, POG e inviável de ser feito codando casos de colisão controle por controle. Felizmente o Delphi possui a função ControlAtPos.

Essa função faz uma varredura nos controles da janela e verifica qual deles está no ponto que você deseja saber usando a API PtInRect.

 

Caso essa função não exista em uma biblioteca escrita na sua linguagem, então aqui vai ela para você tentar converter:

 

 

É necessário se cadastrar para acessar o conteúdo.

 

 

Essa função é chamada da seguinte forma:

 

É necessário se cadastrar para acessar o conteúdo.

 

Pos - Argumento do tipo TPoint. Ele define o ponto no plano cartesiano de onde você quer saber se há um controle;

AllowDisabled (opcional, padrão False) - Define se deve levar em conta controles desabilitados;

AllowWinControls (opcional, padrão False) - Define se deve levar em conta controles de janela.

 

Com essa função é possível verificar facilmente se ocorreu ou não uma colisão. Basta fazer as seguintes varreduras:

 

Colisão por cima:

É necessário se cadastrar para acessar o conteúdo.

 

Colisão por baixo:

É necessário se cadastrar para acessar o conteúdo.

 

Colisão pela esquerda:

É necessário se cadastrar para acessar o conteúdo.

 

Colisão pela direita:

É necessário se cadastrar para acessar o conteúdo.

 

Todas essas varreduras eu pensei e codei sozinho, não vou explicar como cada uma funciona. Elas são simples, se quiser estude o code e descubra você mesmo.

 

Baixe o source de exemplo e veja todas os conceitos aqui trabalhos em ação.

 

[DOWN]

É necessário se cadastrar para acessar o conteúdo.
[/DOWN]

[sENHA]

É necessário se cadastrar para acessar o conteúdo.
[/sENHA]

 

FAQ

 

 

Q: Como posso filtrar as colisões de forma que alguns objetos não sejam considerados obstáculos?

A: Filtre pelo nome do objeto. Para isso utilize uma variável para receber o resultado de ControlAtPos, verifique se Assigned(variavel) returna True. Se não então continue a varredura, se sim então verifique o nome do objeto e se o nome for o mesmo do objeto que está em sua lista de exceções então continue a varredura (use a função Continue).

 

Q: Como faço meu objeto parar ao colidir com outro?

A: Impeça-o de incrementar seu Left e/ou Top.

 

Q: Se eu não quiser utilizar a função ControlAtPos porque quero fazer uma varredura com os pixels para fazer um tratamento melhor das colisões, qual função usaria para isso?

A: Use a função ControlAtPos em complemento com a função GetPixel.

Link para o comentário
Compartilhar em outros sites

Não acredito que já existia uma função pra fazer isso...

 

Eu tava quebrando a cabeça aqui pra fazer uma função de anti-colisão T_T.

Ficou até que mais ou menos, já que tava meio bugada rç, as vezes acontecia do boneco ir parar no teto...

 

#OFF

Ryo, você conhece alguma forma do TImage não ficar piscando quando troca a imagem?

Link para o comentário
Compartilhar em outros sites

Não acredito que já existia uma função pra fazer isso...

 

Eu tava quebrando a cabeça aqui pra fazer uma função de anti-colisão T_T.

Ficou até que mais ou menos, já que tava meio bugada rç, as vezes acontecia do boneco ir parar no teto...

 

#OFF

Ryo, você conhece alguma forma do TImage não ficar piscando quando troca a imagem?

 

Tenta usar Form1.DoubleBuffered := True, ou se o IMG estiver em um Panel use Panel1.DoubleBuffered...

 

Muito bom!

Não é dificil fazer um jogo, basta ter paciência

Meu maior problema com jogos sempre foi a colisão, mas ai me ensinaram que,

o melhor jeito de saber se colidiu, é verificando se não colidiu. fica muito mais facil, mas com essa função ai fica facil d+

Link para o comentário
Compartilhar em outros sites

Não acredito que já existia uma função pra fazer isso...

 

Eu tava quebrando a cabeça aqui pra fazer uma função de anti-colisão T_T.

Ficou até que mais ou menos, já que tava meio bugada rç, as vezes acontecia do boneco ir parar no teto...

 

#OFF

Ryo, você conhece alguma forma do TImage não ficar piscando quando troca a imagem?

 

No OnCreate:

 

É necessário se cadastrar para acessar o conteúdo.

 

Não tinha visto que o luxfer tinha postado.

Link para o comentário
Compartilhar em outros sites

Ryokusei falou pouco, mas falou bonito (:

Caramba eu tava sofrendo pakas para fazer isto, enquanto tem um APi para isto :@

Vou fixar para não morrer o tópico até um certo tempo !

Parabéns Ryo.

Vai ficar muito bom seu projeto rs

4I1ShmNRGyg2k.webp

Link para o comentário
Compartilhar em outros sites

  • 2 semanas atrás...

Muito bom o tópico.

Está explicando cada parte, dos processos com bastante conteúdo legíve,l para membros da Web Cheats

Parabéns, irá ajuda, pelo excesso de dicas informaçôes com certeza.

Obg por compartilhar com nosco!

Link para o comentário
Compartilhar em outros sites

Easy , ate quem nao tem conhecimento de programação faz isso ;)

 

@ops

Odeio EMO!

 

Favor não floodar. Comentários inúteis que nada acrescentam ao tópico são considerados flood e, contra as regras do fórum.

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.