Entrar
Últimos assuntos
» Colisões não funcionandopor RastaMaan Ontem à(s) 19:49
» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Ontem à(s) 16:45
» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18
» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30
» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07
» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45
» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51
» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31
» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11
» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17
» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18
» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34
» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13
» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18
» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12
» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02
» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55
» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42
» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56
» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49
» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21
» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21
#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
|
|