Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Hoje à(s) 13:33
» É possível fazer istó no game maker
por William Lima Hoje à(s) 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Entenda as funções de colisão
+4
sonic luan
.:Allison:.
Machow8
PedroX
8 participantes
Página 1 de 1
Entenda as funções de colisão
Nesse tutorial vou mostrar como usar as funções de colisão.
Essas funções são muito úteis para quem sabe usá-las.
Antes de começar, vamos para os requisitos:
- Game Maker (qualquer versão recente)
- Noção básica de GML
Vamos dividir o tutorial em duas partes:
- Funções de Colisão simples: Place e Position.
- Funções de Colisão avançadas: Retângulo, Circulo, Linha e Ponto.
place_free: Essa função checa se o objeto (sprite) está livre de colisões (com objetos sólidos) na posição indicada.
place_meeting: É quase a mesma coisa que a função anterior. Essa checa se a sprite está colidindo com um objeto específico, na posição indicada.
place_empty: Parece com a primeira. Essa checa se a sprite está livre de colisões, na posição indicada, com qualquer objeto, mesmo que este não seja sólido.
position_empty: Essa função verifica se, na posição indicada, não há nenhum objeto.
position_meeting: Checa se o objeto especificado está na posição determinada.
instance_place: Checa se tem um objeto na posição indicada, retornando o id da instância ou noone. Ambos os objetos precisam de um sprite.
instance_position: Checa se tem um objeto na posição indicada, retornando seu id.
Colisão retangular:
Essa função usa um retângulo para detectar as colisões.
Em todos os exemplos abaixo, a origem do sprite deve estar no começo.
O sprite deve ter o tamanho 32x32 em todos os exemplos citados.
Colisão circular:
Essa função detecta a colisão atraves de um circulo.
Colisão por Linha:
Essa função detecta uma colisão de maneira bem diferente, checando se entre sua posição e outra posição há um objeto, como uma parede.
Colisão por Ponto:
Checa se um objeto está colidindo com determinado ponto.
É bem semlhante com place_meeting.
Você pode usar algumas técnicas interessantes nessas funções.
Vamos ver um exemplo:
Isso destroi a parede, quando o objeto vai na direção dela (da esquerda para a direita). Você pode usar essa técnica com todas as funções mostradas.
Conclusão do tutorial
Espero que tenham entendido para que serve cada uma das funções.
Qualquer dúvida, podem me perguntar neste tópico.
Qualquer sugestão será bem-vinda.
Esse tutorial será um manual das colisões, em português.
Talvez farei esses exemplos:
- Invencibilidade: Ao colidir com um inimigo, destruir ele.
- Inteligência artificial: Ao passar por um buraco, o inimigo pula, usando a funcão place_empty ou place_free.
- Entre outros. São inúmeras as coisas que se pode fazer.
Até mais!
Essas funções são muito úteis para quem sabe usá-las.
Antes de começar, vamos para os requisitos:
- Game Maker (qualquer versão recente)
- Noção básica de GML
Vamos dividir o tutorial em duas partes:
- Funções de Colisão simples: Place e Position.
- Funções de Colisão avançadas: Retângulo, Circulo, Linha e Ponto.
Funções de Colisões simples: Place e Position
place_free: Essa função checa se o objeto (sprite) está livre de colisões (com objetos sólidos) na posição indicada.
- Código:
if place_free(x,y+1)
{//espaço livre (de sólidos) um pixel abaixo}
place_meeting: É quase a mesma coisa que a função anterior. Essa checa se a sprite está colidindo com um objeto específico, na posição indicada.
- Código:
if place_meeting(x+5,y,obj_parede)
{//tem uma parede na minha frente}
place_empty: Parece com a primeira. Essa checa se a sprite está livre de colisões, na posição indicada, com qualquer objeto, mesmo que este não seja sólido.
- Código:
if place_empty(x,y+1)
{//espaço livre um pixel abaixo}
position_empty: Essa função verifica se, na posição indicada, não há nenhum objeto.
- Código:
if position_empty(100,100)
{//na posição (100,100) não há nenhum objeto}
position_meeting: Checa se o objeto especificado está na posição determinada.
- Código:
if position_meeting(mouse_x,mouse_y,obj_botao)
{//no local que o mouse está, tem um botão}
instance_place: Checa se tem um objeto na posição indicada, retornando o id da instância ou noone. Ambos os objetos precisam de um sprite.
- Código:
if instance_place(x+5,y,all)
{//tem um objeto na minha frente}
instance_position: Checa se tem um objeto na posição indicada, retornando seu id.
- Código:
if instance_position(x+5,y,all)
{//tem um objeto na minha frente, possivelmente dentro de mim (se meu sprite tiver mais que 5 pixels)}
Funções de Colisão avançadas
Colisão retangular:
Essa função usa um retângulo para detectar as colisões.
Em todos os exemplos abaixo, a origem do sprite deve estar no começo.
O sprite deve ter o tamanho 32x32 em todos os exemplos citados.
- Código:
if collision_rectangle(x+30,y,x+34,y+32,obj_parede,1,0)
{
//Colidi no meu lado direito com a parede.
// O numero 1 significa precisão.
}
Colisão circular:
Essa função detecta a colisão atraves de um circulo.
- Código:
if collision_circle(x,y,16,obj_parede,1,0)
{
//estou colidindo com o objeto parede na minha esquerda
//o ponto central do circulo sera no começo do meu sprite
//o circulo tera 16 pixels de raio e a colisão será precisa
}
Colisão por Linha:
Essa função detecta uma colisão de maneira bem diferente, checando se entre sua posição e outra posição há um objeto, como uma parede.
- Código:
if collision_line(x+30,y+16,x+64,y+16,obj_parede,1,0)
{
//tem uma parede na minha direita
}
Colisão por Ponto:
Checa se um objeto está colidindo com determinado ponto.
É bem semlhante com place_meeting.
- Código:
if collision_point(x+40, y+16, obj_parede, 1, 0)
{
//tem uma parede na minha direita
}
DICAS ADICIONAIS
Você pode usar algumas técnicas interessantes nessas funções.
Vamos ver um exemplo:
- Código:
obj = collision_point(x+40, y+16, obj_parede, 1, 0)
with(obj) instance_destroy();
Isso destroi a parede, quando o objeto vai na direção dela (da esquerda para a direita). Você pode usar essa técnica com todas as funções mostradas.
Conclusão do tutorial
Espero que tenham entendido para que serve cada uma das funções.
Qualquer dúvida, podem me perguntar neste tópico.
Qualquer sugestão será bem-vinda.
Esse tutorial será um manual das colisões, em português.
Talvez farei esses exemplos:
- Invencibilidade: Ao colidir com um inimigo, destruir ele.
- Inteligência artificial: Ao passar por um buraco, o inimigo pula, usando a funcão place_empty ou place_free.
- Entre outros. São inúmeras as coisas que se pode fazer.
Até mais!
Última edição por Pedro Henrique em Seg 17 Out 2011, 18:06, editado 6 vez(es)
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Entenda as funções de colisão
Ótimo tutorial, bem explicado e detalhado,e como vc é uma pessoa legal, acrescentei +1 em sua reputação. Continue assim: ajudando os outros!
Última edição por Zignaw em Dom 22 maio 2011, 23:29, editado 2 vez(es)
Machow8- Data de inscrição : 21/05/2011
Reputação : 16
Número de Mensagens : 625
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Entenda as funções de colisão
Nuss, muito bom, daí eu só sabia os 3 primeiros, básicos, pratiquei tanto que está tudo decorado,
Ótimo tutorial, bem explicativo e com muitos exemplos, do jeito que eu gosto, também dei reputação.
Ótimo tutorial, bem explicativo e com muitos exemplos, do jeito que eu gosto, também dei reputação.
Re: Entenda as funções de colisão
Eu tbm não, sonic luan, por isso é tão importante que pessoas, como o Pedro Henrique, dividam seus extensos conhecimentos conosco.
Machow8- Data de inscrição : 21/05/2011
Reputação : 16
Número de Mensagens : 625
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Entenda as funções de colisão
Valeu gente!
Estou feliz por ajudá-los.
Eu acho que o nome do tópico está meio incoerente com o assunto.
Vão pensar que é aqueles função: collision_circle, collision_rectangle etc.
Alguem sugere um novo titulo?
Até mais!
Estou feliz por ajudá-los.
Eu acho que o nome do tópico está meio incoerente com o assunto.
Vão pensar que é aqueles função: collision_circle, collision_rectangle etc.
Alguem sugere um novo titulo?
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Entenda as funções de colisão
Acredito que o nome está perfeito, mas já que vc pediu uma sugestão, ponha algo como: "Entenda as funções de colisão entre obojetos.", ou algo nesse estilo.
Última edição por Zignaw em Seg 23 maio 2011, 10:54, editado 1 vez(es)
Machow8- Data de inscrição : 21/05/2011
Reputação : 16
Número de Mensagens : 625
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Entenda as funções de colisão
Você não precisa nem mudar o título, apenas faça um edit explicando as funções de colisão por área.
(collision_point, collision_line, collision_circle, collision_rectangle, collision_ellipse)
Que são quase tão simples quanto as outras.
Assim será um tutorial completo de colisões 8D.
(collision_point, collision_line, collision_circle, collision_rectangle, collision_ellipse)
Que são quase tão simples quanto as outras.
Assim será um tutorial completo de colisões 8D.
Re: Entenda as funções de colisão
Atendendo ao pedido do Mathaeuz, eu coloquei outras funções.
Agora o tutorial está bem mais completo.
Atualizado.
Até mais!
Agora o tutorial está bem mais completo.
Atualizado.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Entenda as funções de colisão
WOW, que maravilha! Ficou melhor que antes! Vlw por essa bem-vinda atualização, Pedro Henrique!
Machow8- Data de inscrição : 21/05/2011
Reputação : 16
Número de Mensagens : 625
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Entenda as funções de colisão
Muito bom, Pedro! Eu mesmo tinha algumas dúvidas em relação ao código place_empty e alguns outros ai citados. Parabéns pelo tutorial! =D
Rhino- Games Ranking :
Notas recebidas : C-B
Data de inscrição : 17/04/2010
Reputação : 11
Número de Mensagens : 136
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Entenda as funções de colisão
Olá, Pedro Henrique! Parabéns pela iniciativa!
Gostaria de acrescentar umas informações que você pode incluir no tutorial:
- é possível armazenar a id retornada por algumas dessas funções numa variável e usar isso para inserir linhas de código dentro dela. Exemplo:
- essas mesmas funções te retornam apenas a id de uma das instâncias, não sei se aquela de menor ou maior id (mas sei que isso independe da posição da instância). É importante saber disso, porque às vezes o programador quer inserir códigos em todas as instâncias que cumprem determinados requisitos. Por exemplo, "na hora a torre de veneno que atirar, quero que todos os zumbis próximos dela mudem a variável 'envenenado' para 'true', então vou usar collision_circle". Isso não funciona, só um dos zumbis será envenenado, não necessariamente aquele mais próximo da torre (no caso, infelizmente, o código de checar a distância da torre tem que correr em TODOS os zumbis, tipo "with(obj_zombie); if distance_to_object...").
Gostaria de acrescentar umas informações que você pode incluir no tutorial:
- é possível armazenar a id retornada por algumas dessas funções numa variável e usar isso para inserir linhas de código dentro dela. Exemplo:
- Código:
var colidido;
colidido=instance_place(x, y, all)
with (colidido)
instance_destroy()
- Código:
var colidido;
colidido=collision_circle(x,y,all)
colidido.gravity=0.5
- essas mesmas funções te retornam apenas a id de uma das instâncias, não sei se aquela de menor ou maior id (mas sei que isso independe da posição da instância). É importante saber disso, porque às vezes o programador quer inserir códigos em todas as instâncias que cumprem determinados requisitos. Por exemplo, "na hora a torre de veneno que atirar, quero que todos os zumbis próximos dela mudem a variável 'envenenado' para 'true', então vou usar collision_circle". Isso não funciona, só um dos zumbis será envenenado, não necessariamente aquele mais próximo da torre (no caso, infelizmente, o código de checar a distância da torre tem que correr em TODOS os zumbis, tipo "with(obj_zombie); if distance_to_object...").
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Entenda as funções de colisão
@saim
Obrigado pela sugestão.
Pesquisei em alguns sites para ver quais funções apresentam essa tecnica.
Sua sugestão foi adicionada ao tópico.
Quem tiver sugestões, pode colocar aqui.
Eu vou avaliar e colocar.
Até mais!
Obrigado pela sugestão.
Pesquisei em alguns sites para ver quais funções apresentam essa tecnica.
Sua sugestão foi adicionada ao tópico.
Quem tiver sugestões, pode colocar aqui.
Eu vou avaliar e colocar.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Entenda as funções de colisão
Excelente tutorial. Eu estava pensando em postar um tutorial sobre colisões, mas felizmente vc me poupou do trabalho. =)
Parabéns, ficou excelente.
Só faça uma correção por favor (coisa de cunho conceitual).
As funçoes que começam com position (tipo position_empty), elas checam se existe algum objeto em um determinado ponto(x,y) que é a menor porção possível do espaço (não usaria o termo posição).
Acho que vc pode até ilustrar a figura abaixo no seu tutorial, pro pessoal diferenciar o que é place (sprite) de position (ponto).
Veja:
Parabéns, ficou excelente.
Só faça uma correção por favor (coisa de cunho conceitual).
As funçoes que começam com position (tipo position_empty), elas checam se existe algum objeto em um determinado ponto(x,y) que é a menor porção possível do espaço (não usaria o termo posição).
Acho que vc pode até ilustrar a figura abaixo no seu tutorial, pro pessoal diferenciar o que é place (sprite) de position (ponto).
Veja:
fredcobain- Games Ranking :
Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios :
x 0 x 3 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Entenda as funções de colisão
Eu vi esse tutorial, que me serviu de base para fazer o meu próprio.
Eu pensei em colocar mais detalhes assim.
Pensei nisso:
Eu pensei em colocar mais detalhes assim.
Pensei nisso:
Pedro Henrique escreveu:O place_meeting checa se naquela posição qualquer parte do sprite colide com o outro objeto. Já o position_meeting, checa se determinado ponto está colidindo com um objeto.
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Entenda as funções de colisão
Pedro Henrique escreveu:Eu vi esse tutorial, que me serviu de base para fazer o meu próprio.
Eu pensei em colocar mais detalhes assim.
Pensei nisso:Pedro Henrique escreveu:O place_meeting checa se naquela posição qualquer parte do sprite colide com o outro objeto. Já o position_meeting, checa se determinado ponto está colidindo com um objeto.
Pois é, apenas sugiro que vc troque a palavra posição por ponto(x,y), ou mesmo pixel.
Acho que vale a pena adicionar a imagem ao tutorial pra dar uma noção ainda melhor da diferença.
Aquela parte de usar a ID que o Saim falou tbm é interessantíssima, eu sugiro que vc adicione no seu tutorial. (p.s: os comentários do Saim geralmente são brilhantes mesmo, o cara é fera!).
=)
fredcobain- Games Ranking :
Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios :
x 0 x 3 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Entenda as funções de colisão
Eu adicionei a imagem ao tutorial (antes de você postar novamente).
A parte do saim está lá também, só que quase no final.
Obrigado pelas sugestões, e podem fazer mais...
Até mais!
A parte do saim está lá também, só que quase no final.
Obrigado pelas sugestões, e podem fazer mais...
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Tópicos semelhantes
» [?] Funções obsoletas, funções online GMS...
» Procurando quem entenda de blogs
» Entenda melhor o que é VETORIZAÇÃO DE IMAGENS
» Procuro 1 Programador que entenda de Visual Basic
» colisão de queda após outra colisão dando problema
» Procurando quem entenda de blogs
» Entenda melhor o que é VETORIZAÇÃO DE IMAGENS
» Procuro 1 Programador que entenda de Visual Basic
» colisão de queda após outra colisão dando problema
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos