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 02 - Colisões retangulares
+5
Naut2006
Ruan
André Gustavo
SIGILOSO
All-x
9 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
#COL Aula 02 - Colisões retangulares
COLISÕES
Aula 02 - Colisões retangulares
(Atualizado 08/02/2015)
Bem-vindos a segunda parte das aulas sobre colisões, nesta aula aprenderemos sobre colisões retangulares, que é um sistema onde se cria um retângulo para detectar as colisões. Mas primeiro você precisa saber o seguinte:
1-Você deve saber a altura e a largura da sprite.
Vou usar uma sprite de 32 (altura)x32 (largura).
2-Saber como localizar cada pixel usando o editor de imagem do GM:
-Passe o mouse no pixel que você quer identificar e veja as posições na parte inferior da janela:
3-Entender o que é posição relativa e posição absoluta:
x+5 e y-5 representam posições relativas ao objeto à ela atribuida.
x=5 e y=5 representam posições absolutas ao objeto atribuido.
x+=5 e y-=5 representam mudança de posição.
Vão ser dois objetos principais: o player e o inimigo. Estudaremos o código da engine abaixo:
Começaremos com uma colisão na lateral direita do player. Va ao evento Create do player:
- Código:
//Guarda na variável a ID do inimigo que ficar na área de colisão
colide_inimigo = collision_rectangle(x+31, y, x+46, y+32, inimigo, 0, 0)
O mesmo código está presente no step, para checarmos a colisão em tempo real.
Explicação de cada parte:
Como você deve estar vendo há duas posições x e duas y. Cada uma delas é um lado do retângulo (por isso o nome collision_rectangle):
x+31: Lado esquerdo do retângulo;
y: Parte de cima do retângulo;
x+46: Lado direito do retângulo;
y+31: Parte de baixo do retângulo;
obj: Objeto que checaremos se está na área de colisão;
true: Colisão precisa checa cada pixel da sprite do inimigo (Caso a sua máscara de colisão seja precisa). Deixando false ele usa um retângulo para detectar a colisão;
notme: Caso você esteja checando a colisão de um objeto com instâncias dele mesmo e queira que a colisão não pegue essa instancia emissora, coloque como true. Caso contrário coloque false.
A função collision_rectangle retorna dois valores:
- -4 quando não há nenhuma instância do obj (Objeto que colocamos na função) na área de colisão;
- A ID (Número que identifica cadainstância de um objeto) quando há uma instância do obj na área de colisão.
Ela é considerada uma expressão verdadeira sempre que houver uma instância do obj na área de colisão, pois o número retornado é maior que zero:
- Código:
//Desenha a frase se estiver colidindo com o inimigo
if player.colide_inimigo
{
draw_text(4,4,"Esse bicho feio tá na área de colisão, sua ID é:"+string(player.colide_inimigo))
}
Veja que para ter certeza de que a área de colisão está correta, nós desenhamos um retângulo vermelho no evento Draw do objeto controle:
- Código:
//Desenha retângulo nas mesmas coordenadas dadas no collision_rectangle
draw_rectangle(player.x+31, player.y, player.x+46, player.y+31, 0)
Ainda esta com dúvida? Então pergunte que eu respondo! XD
FLWS!
Última edição por Alex FC em Seg 09 Fev 2015, 20:20, editado 15 vez(es) (Motivo da edição : Atualização)
Re: #COL Aula 02 - Colisões retangulares
parabéns cara,ótimo tuto,vai me ajudar bastante!!
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 02 - Colisões retangulares
@Tópico
Algum administrador mova o tópico para "Tutoriais da equipe GMBR" fazendo um favor, me esqueci que tinha uma área só pra staff.
@SIGILOSO
Obrigado! É isso mesmo que eu quero, que ajude muita gente. XD
FLWS!
Algum administrador mova o tópico para "Tutoriais da equipe GMBR" fazendo um favor, me esqueci que tinha uma área só pra staff.
@SIGILOSO
Obrigado! É isso mesmo que eu quero, que ajude muita gente. XD
FLWS!
Re: #COL Aula 02 - Colisões retangulares
muito bom vai ajuda muito
André Gustavo- Data de inscrição : 16/06/2009
Reputação : 1
Número de Mensagens : 278
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 02 - Colisões retangulares
Oo ótimo tuto. nem sabia q dava pra fazer isso...
esperando a segunda parte
esperando a segunda parte
Ruan- Data de inscrição : 10/06/2008
Reputação : 0
Número de Mensagens : 184
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 02 - Colisões retangulares
Otimo tutorial, assim como os outros.
Uma pergunta: o que significa aquele zero depois de true? Alterar ele muda alguma coisa?
Goodbye
Uma pergunta: o que significa aquele zero depois de true? Alterar ele muda alguma coisa?
Goodbye
Naut2006- Data de inscrição : 11/08/2009
Reputação : 0
Número de Mensagens : 213
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 02 - Colisões retangulares
Ah é mesmo. Essa parte nem eu sei direito. É algo como checar se esta a coledir com ele mesmo. Mas eu sempre deixo em 0. Se alguém souber explicar por favor poste aqui vlw?
FLWS!
FLWS!
Re: #COL Aula 02 - Colisões retangulares
Blz então =D
Mais uma pergunta, tem como colocar no lugar do objeto colocar solid, para que ele perceba quando encostou em algo marcado como solido?
Goodbye
Mais uma pergunta, tem como colocar no lugar do objeto colocar solid, para que ele perceba quando encostou em algo marcado como solido?
Goodbye
Naut2006- Data de inscrição : 11/08/2009
Reputação : 0
Número de Mensagens : 213
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 02 - Colisões retangulares
Para isso existe um código mais simples:
Agora nos próximos tutus eu colocarei as colisões mais simples.
FLWS!
- Código:
if not(place_free(x+5,y)){função}///se não estiver livre de colisão com sólidos na direita, função acontece.
Agora nos próximos tutus eu colocarei as colisões mais simples.
FLWS!
Re: #COL Aula 02 - Colisões retangulares
Fale mestre Alex FC...
po o papo é o seguinte comecei a fazer o tal jogo stealth e talz, dai fiz o seguinte:
no que eu errei ai?
outra coisa: como faço para que a cada sprite tenha um retangulo de colisao diferente? por exemplo um cara de frente nao tem o mesmo retangulo de colisao do q um cara de costas...
vlw, espero q tenha dado pra entender...
po o papo é o seguinte comecei a fazer o tal jogo stealth e talz, dai fiz o seguinte:
- Código:
if collision_rectangle(x+31,y+31,x,y+131,pinkchar,brick,true,0)
no que eu errei ai?
outra coisa: como faço para que a cada sprite tenha um retangulo de colisao diferente? por exemplo um cara de frente nao tem o mesmo retangulo de colisao do q um cara de costas...
vlw, espero q tenha dado pra entender...
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 02 - Colisões retangulares
Para começar você colocou dois objetos:
if collision_rectangle(x+31,y+31,x,y+131,pinkchar,brick,true,0)
é só um:
if collision_rectangle(x+31,y+31,x,y+131,pinkchar,true,0)
Assim funciona, mas me explica o que você quer fazer que eu ajudo. vlw?
E pra muda o dependendo da imagem é só fazer isso:
Bom se eu entendi direito é assim, caso ele colida para destruir um objeto que é mais de um é outro código. vlw?
FLWS!
if collision_rectangle(x+31,y+31,x,y+131,pinkchar,brick,true,0)
é só um:
if collision_rectangle(x+31,y+31,x,y+131,pinkchar,true,0)
Assim funciona, mas me explica o que você quer fazer que eu ajudo. vlw?
E pra muda o dependendo da imagem é só fazer isso:
- Código:
if sprite_index=spr_direita
{if collision_rectangle(x,y,x+36,y+31,pinkchar,true,0){função}}
if sprite_index=spr_esquerda
{if collision_rectangle(x,y,x-5,y+31,pinkchar,true,0){função}}
Bom se eu entendi direito é assim, caso ele colida para destruir um objeto que é mais de um é outro código. vlw?
FLWS!
Re: #COL Aula 02 - Colisões retangulares
uma pequena pergunta
eu sei que ja sou veterano nesse site mas eu
sou tão lesado que não consegui faze aquele trem la dos fantasminhas sim eu sei fase o personagens move alias a unicacoisa que sei sei ate gravidade e salto mas só
enfim vcs acham que é aconselhavel que eu comece dessa lição? se não for muita lesalidade da minha parte
eu sei que ja sou veterano nesse site mas eu
sou tão lesado que não consegui faze aquele trem la dos fantasminhas sim eu sei fase o personagens move alias a unicacoisa que sei sei ate gravidade e salto mas só
enfim vcs acham que é aconselhavel que eu comece dessa lição? se não for muita lesalidade da minha parte
Re: #COL Aula 02 - Colisões retangulares
Recomendo você ver primeiro as aulas do reddragon e do joão neto. Mas se você acha que ja é bom o bastante...
Recomendo você ver a 4ª parte deste tutorial. São as colisões simples, depois você ve esta e as outras duas. vlw?
FLWS!
Recomendo você ver a 4ª parte deste tutorial. São as colisões simples, depois você ve esta e as outras duas. vlw?
FLWS!
Re: #COL Aula 02 - Colisões retangulares
mto massa... assim ajuda a fazer jogo de plataforma tipo mário
Re: #COL Aula 02 - Colisões retangulares
Aula atualizada - 22/10/12:
- Melhora na grafia e explicação;
- Atualização das imagens.
Ps: As próximas aulas serão atualizadas em breve.
FLWS!
- Melhora na grafia e explicação;
- Atualização das imagens.
Ps: As próximas aulas serão atualizadas em breve.
FLWS!
Tópicos semelhantes
» #COL Aula 03 - Colisões lineares
» #COL Aula 01 - Colisões simples
» #COL Aula 04 - Colisões circulares e de pontos
» [Vídeo-Aula]Aula 4.1 - Usando funções básicas do draw
» Aula 3 - Puzzle - Todas os Modos da Aula 3 Aqui!
» #COL Aula 01 - Colisões simples
» #COL Aula 04 - Colisões circulares e de pontos
» [Vídeo-Aula]Aula 4.1 - Usando funções básicas do draw
» Aula 3 - Puzzle - Todas os Modos da Aula 3 Aqui!
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos