Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) 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
» (RESOLVIDO) 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
#COL Aula 01 - Colisões simples
+6
everlast
gfreaks
falbo
Pratagy
PedroX
All-x
10 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
#COL Aula 01 - Colisões simples
COLISÕES
Aula 01 - Colisões simples
(Atualizado 08/02/2015)
Bem-vindos a primeira parte das aulas de colisões, nesta aula aprenderemos sobre colisões simples e essas são bem fáceis.
As funções que usaremos são:
place_free(x,y)
place_empty(x,y)
place_meeting(x,y,obj)
instance_place(x,y,obj)
instance_position(x,y,obj)
position_meeting(x,y,obj)
Essas funções criam uma nova "caixa de colisão" idêntica a do objeto que as chamou para detectar a colisão (Com exceção das duas últimas que criam apenas um ponto). Olhe para o esquema:
As caixas são diferentes caso a colisão seja precisa ou não. A área contornada em vermelho será usada para detectar a colisão. Para saber como é a área de seu objeto, abra a sprite do objeto e veja em sua configuração se a caixa "Precise Collision Checking" está marcada. Se sim, ela é precisa. Para mais detalhes veja esta aula:
#DGM Aula 03 - Sprites
Vamos em sequência, a função place_free é usada para detectar colisões com objetos sólidos (todos os objetos sólidos).
- Código:
place_free(x, y);
x: Posição horizontal a ser checada.
y: Posição vertical a ser checada.
Retorna 1 caso colidir com algum objeto sólido, caso não retorna 0.
O exemplo mais simples dessa função esta no código de gravidade, nos jogos de plataforma:
- Código:
//Gravidade
if place_free(x,y+1)
{
gravity = 1
}
else
{
gravity = 0
}
Nesse código a caixa de colisão é criada 1 pixel para baixo do objeto. Dessa forma ela evita que o objeto afunde no chão. Isso, pois ela colide com o chão antes do objeto, por estar adiantada 1 pixel. Caso não estiver livre de colisão com sólidos a gravidade é zerada e se estiver livre a gravidade é 1.
Outro exemplo é no código de pulo:
- Código:
//Pula
if not place_free(x,y+1) and keyboard_check_pressed(vk_space)
{
vspeed=-10
}
A função place_empty, detecta colisão com qualquer objeto. Essa é a única diferença que ela tem do place_free.
- Código:
place_empty(x, y);
x: Posição horizontal a ser checada.
y: Posição vertical a ser checada.
Retorna 1 caso colidir com algum objeto, caso não retorna 0.
Agora vamos a função place_meeting. Nela você pode escolher o objeto que será checado na colisão, independente se ele for sólido ou não.
- Código:
place_meeting(x, y, obj);
x: Posição horizontal a ser checada.
y: Posição vertical a ser checada.
obj: Nome do objeto a ser checado ou ID de instancia.
Retorna 1 caso colidir com o objeto selecionado, caso não retorna 0.
Vamos ver como funciona:
- Código:
if place_meeting(x+1,y,obj_1){/*algo acontece aqui*/}
Mas digamos que você queira que a função retorne a id da instância que está colidindo na caixa. Então apenas troque por instance_place.
- Código:
instance_place(x, y, obj);
x: Posição horizontal a ser checada.
y: Posição vertical a ser checada.
obj: Nome do objeto a ser checado ou ID de instancia.
Retorna ID do objeto caso colidir com o objeto selecionado, caso não retorna -4 que é o mesmo que nada.
- Código:
instance_position(x, y, obj);
x: Posição horizontal a ser checada.
y: Posição vertical a ser checada.
obj: Nome do objeto a ser checado ou ID de instancia.
Aqui temos uma diferença importante em relação a anterior. A instance_place usa a mascara de colisão do objeto atual como área de colisão. Já está usa apenas um ponto (x,y). Veja num exemplo prático:
- Código:
//Guarda a instancia que está sobre a posição do mouse.
var tocado = instance_position(mouse_x, mouse_y, obj_inimigo);
//Muda a cor da instância
if tocado
{
tocado.image_blend = c_red;
}
- Código:
position_meeting(x, y, obj);
Idêntica a função acima. A diferença é que está não retorna uma ID, mas sim apenas se há uma instância do objeto naquela posição:
- Código:
if position_meeting(mouse_x, mouse_y, obj_inimigo)
{
show_message("Tem um inimigo aqui!!!");
}
Até aqui você pode entender bem esse código. Nem precisa de explicação detalhada. São funções muito semelhantes.
Qualquer duvida perguntem! vlw?
FLWS!
Última edição por Alex FC em Qua 25 Fev 2015, 17:35, editado 17 vez(es) (Motivo da edição : Atualização)
Re: #COL Aula 01 - Colisões simples
muito bom pra quem comeco agora
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: #COL Aula 01 - Colisões simples
Fala rapa, como sempre seu tutorial ta otimo, tu é o cara.
Seguinte, vo te pedir umas informações adicionais sobre pulo, sei que nao tem muito haver com o que tu tas falando aqui mas enfim.
Resolvi fazer as paradas sozinho, parar de pegar engines e tal, achno isso chato.
Entao resolvi tentar fazer o pulo eu mesmo (ou quase isso)... Entao como faço pra o objeto quando chegar a certa distancia no ar voltar para o chao?
Ir eu ja sei, ja ta explicado aqui, mas o obj vai ate o infinito
Seguinte, vo te pedir umas informações adicionais sobre pulo, sei que nao tem muito haver com o que tu tas falando aqui mas enfim.
Resolvi fazer as paradas sozinho, parar de pegar engines e tal, achno isso chato.
Entao resolvi tentar fazer o pulo eu mesmo (ou quase isso)... Entao como faço pra o objeto quando chegar a certa distancia no ar voltar para o chao?
Ir eu ja sei, ja ta explicado aqui, mas o obj vai ate o infinito
Pratagy- Data de inscrição : 03/08/2009
Reputação : 0
Número de Mensagens : 23
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 01 - Colisões simples
Bom, se eu entendi bem você quer o pulo né? Vamos passo-a-passo para você poder entender.
1-Crie 2 objetos: Player e o Chao.
2-marque a opção "solid" no obj_chao ou coloque isso no create dele:
2-Va ao step do player e coloque:
3-va na colisão do player com o bloco e coloque:
Assim é o pulo, se quiser mais detalhes me mande uma MP. Vlw?
FLWS!
1-Crie 2 objetos: Player e o Chao.
2-marque a opção "solid" no obj_chao ou coloque isso no create dele:
- Código:
solid=true
2-Va ao step do player e coloque:
- Código:
if place_free(x,y+2){gravity=1}
else
gravity=0
if vspeed>15{vspeed=15}
if keyboard_check_pressed(vk_up)
{
if !place_free(x,y+2){vspeed=-10}
}
3-va na colisão do player com o bloco e coloque:
- Código:
move_contact_solid(direction,15)
speed=0
Assim é o pulo, se quiser mais detalhes me mande uma MP. Vlw?
FLWS!
JnickU gosta desta mensagem
Re: #COL Aula 01 - Colisões simples
Estou com um problema!
Tipo quando minha boneca bate na lateral do chão se eu ficar apertando as setas direita ou esquerda ela nao cai!
Alguem pode me ajudar?
Tipo quando minha boneca bate na lateral do chão se eu ficar apertando as setas direita ou esquerda ela nao cai!
Alguem pode me ajudar?
falbo- Data de inscrição : 01/08/2009
Reputação : 0
Número de Mensagens : 52
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 01 - Colisões simples
Claro! É simples, não sei se você esta usando hspeed ou x, então vou mostrar as duas formas:
1- A com x, o código é assim:
2- A com hspeed, o código é assim:
Não sei se você esta usando movimentação pelo step ou por eventos das teclas, por isso coloquei só isso. Vlw?
FLWS!
1- A com x, o código é assim:
- Código:
//esquerda
if place_free(x+5,y){x+=5}
//direita
if place_free(x-5,y){x-=5}
2- A com hspeed, o código é assim:
- Código:
//esquerda
if place_free(x+5,y){hspeed+=5}
//direita
if place_free(x-5,y){hspeed-=5}
Não sei se você esta usando movimentação pelo step ou por eventos das teclas, por isso coloquei só isso. Vlw?
FLWS!
Re: #COL Aula 01 - Colisões simples
Oi sei que a pergunta que vou fazer agora e boba mais estou com duvida ainda em uma coisa!
Onde eu coloko esse codigo?
no step do player ou na colisão entre o player e o chão?
Tipo eu uso movimentação pelo step que aprendi aqui no forum com as aulas do reddragon!
Onde eu coloko esse codigo?
no step do player ou na colisão entre o player e o chão?
Tipo eu uso movimentação pelo step que aprendi aqui no forum com as aulas do reddragon!
falbo- Data de inscrição : 01/08/2009
Reputação : 0
Número de Mensagens : 52
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 01 - Colisões simples
Por exemplo onde você colou hspeed+5 ou x+=5 você coloca if place_free(x+5,y){x+=5}. É só trocar. vlw?
FLWS!
FLWS!
Re: #COL Aula 01 - Colisões simples
e tudo a mema coisa
esses cara so da ctrl c ctrl v e depois fica fazendo essas pergunta
esses cara so da ctrl c ctrl v e depois fica fazendo essas pergunta
ae brow nem precisava mostra isso por que tava obviocom x, o código é assim:
com hspeed, o código é assim:
gfreaks- Data de inscrição : 29/08/2009
Reputação : 0
Número de Mensagens : 24
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 01 - Colisões simples
se num viu q o kra é iniciante, dexa o kra perguntar, só perguntando que ele vai tirar a dúvida dele, até agora só vi vc postando coisas ignorantes e sem educação, agente ta aqui pra aprender tbm, e perguntar, mesmo que uma coisa óbvia( que não é tão óbvia assim, já que ele não conseguiu entender) faz parte, vc com certeza devve ser um desses garotos novinhos, que acham que só pq aprenderam, são mais inteligêntes do que os outros, vê se cresce rapaz, ta na hora néh!
everlast- Data de inscrição : 28/07/2009
Reputação : 0
Número de Mensagens : 76
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 01 - Colisões simples
everlast says:
se num viu q o kra é iniciante, dexa o kra perguntar, só perguntando que ele vai tirar a dúvida dele, até agora só vi vc postando coisas ignorantes e sem educação, agente ta aqui pra aprender tbm, e perguntar, mesmo que uma coisa óbvia( que não é tão óbvia assim, já que ele não conseguiu entender) faz parte, vc com certeza devve ser um desses garotos novinhos, que acham que só pq aprenderam, são mais inteligêntes do que os outros, vê se cresce rapaz, ta na hora néh!
calma cara,desse jeito ninguem vai a lugar nenhum,msm eu concordando 100% com vc =/
SIGILOSO- Games Ranking :
Notas recebidas : A+A+A+A+A+A+A
Data de inscrição : 06/06/2009
Reputação : 39
Número de Mensagens : 2267
Prêmios :
x 0 x 2 x 0
x 4 x 2 x 1
x 0 x 0 x 0
Re: #COL Aula 01 - Colisões simples
É verdade. E eu também não tive nenhum incomodo em responder. Não postem mais sobre isso aqui, vocês sabem que os tópicos podem ser trancados por causa de brigas né?. Não quero ver meu tópico trancado e nem usuarios banidos. vlw?
FLWS!
FLWS!
Re: #COL Aula 01 - Colisões simples
Poxa, não consigo até hoje parar com essa droga dele grudar na lateral do cubo ...
Já tentei fazer :
E não deu...
Já tentei fazer :
- Código:
if place_free(x+5,y){hspeed+=5}
E não deu...
Adriel- Data de inscrição : 18/07/2009
Reputação : 2
Número de Mensagens : 924
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 01 - Colisões simples
Vlw aê cara, to acompanhando e aprendendo o máximo que posso em todos os seus Tutos !
Re: #COL Aula 01 - Colisões simples
Aula atualizada - 30/11/12:
- Melhora na grafia e explicação;
- Atualização das imagens.
FLWS!
- Melhora na grafia e explicação;
- Atualização das imagens.
FLWS!
Re: #COL Aula 01 - Colisões simples
Ele Não Frequenta mais o Fórum, mas ajuda Outros que tenham a Mesma Questão.Adriel escreveu:if place_free(x+5,y){hspeed+=5}
isso fará com que ele sete o hspeed em 5 enquanto nenhum Sólido Existir, mas quando existir, ele não irá mais Setar, porém ele já está setado, Então ele Continuará andando, para Resolver isto você pode Fazer Assim:
if place_free(x+5,y){hspeed+=5}else{hspeed=0}
_______________________________________
Alex FC Sei que Você está fazendo este Tutorial Voltado a Iniciantes, mas se Você tem Conhecimento Grande em Colisões, podia fazer um Tutorial de Colisão mais Real, Colisão com Física Aplicada.
Re: #COL Aula 01 - Colisões simples
Tenho outros projetos. Um deles vai ajudar muito quem está começando, para ter ideia do total funcionamento do Game Maker.Alex FC Sei que Você está fazendo este Tutorial Voltado a Iniciantes, mas se Você tem Conhecimento Grande em Colisões, podia fazer um Tutorial de Colisão mais Real, Colisão com Física Aplicada.
Vou dar prioridade a esses projetos. Caso eu termine e ninguém tenha criado conteúdo relevante sobre o assunto, eu faço.
FLWS!
Re: #COL Aula 01 - Colisões simples
Ou Seja, Se Sair, Vai Demorar Muito!Tenho outros projetos. Um deles vai ajudar muito quem está começando, para ter ideia do total funcionamento do Game Maker.
Vou dar prioridade a esses projetos. Caso eu termine e ninguém tenha criado conteúdo relevante sobre o assunto, eu faço.
Mas é Importante ter Conteúdo para Iniciantes, porque ele Ajuda os Iniciantes(obvio!), e Tambem ajuda os Que já tem uma Experiências, mas Sempre há Coisas Que Não sabemos, ou não Dominamos, eu Por Exemplo, Não sei Sobre a área de Partículas, e recentemente aprendi a usar ds_list, ainda Não sei fazer um Jogo em 3D(mas Não quero me Aprofundar com isto no GM, apenas Saber o Básico).
A Gente Vai Aprendendo de Pouco em Pouco, se caso sair o Tutorial, ou Explicações, eu Querei Ver.
Tópicos semelhantes
» #COL Aula 02 - Colisões retangulares
» #COL Aula 03 - Colisões lineares
» #COL Aula 04 - Colisões circulares e de pontos
» Aula 3 - Visual Basic o simples "Hello World"
» [Vídeo-Aula]Aula 4.1 - Usando funções básicas do draw
» #COL Aula 03 - Colisões lineares
» #COL Aula 04 - Colisões circulares e de pontos
» Aula 3 - Visual Basic o simples "Hello World"
» [Vídeo-Aula]Aula 4.1 - Usando funções básicas do draw
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos