Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

[PROG]#COL Aula 02 - Colisões retangulares

Tutoriais, videoaulas, guias e downloads para te ajudar nos estudos.
Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 621
Localização: Dourados-MS

Contato:

[PROG]#COL Aula 02 - Colisões retangulares

Mensagem por All-x » Sex Abr 29, 2016 4:29 pm

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).

Imagem

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:

Imagem

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:

[GM:S] DOWNLOAD DA ENGINE

[GM8] DOWNLOAD DA ENGINE

Começaremos com uma colisão na lateral direita do player. Vá ao evento Create do player:

Código: Selecionar todos

//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):

Imagem

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;

Imagem

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: Selecionar todos

//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: Selecionar todos

//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!
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Avatar do usuário
Creation
Novato
Novato
Reações: 0
Mensagens: 14

Re: [PROG]#COL Aula 02 - Colisões retangulares

Mensagem por Creation » Sáb Nov 26, 2016 1:10 am

Alex acho que você esqueceu a função draw_self()

no Draw do personagem

me corrija se estiver errado mais sem isso o game maker apaga o objeto para desenhar por cima dele ai ele não aparece né ?

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitante