[PROG]#COL Aula 02 - Colisões retangulares
Enviado: 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).
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:
[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)
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: 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))
}
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)
FLWS!