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 03 - Colisões lineares
+4
Henrique_GJ
Natch
tata139
All-x
8 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
#COL Aula 03 - Colisões lineares
COLISÕES
Aula 03 - Colisões lineares
(Atualizado 08/02/2015)
Bem-vindos a terceira parte das aulas de colisões, aprenderemos sobre colisões com linhas, que é um sistema onde se cria uma linha para detectar colisões e é um pouco mais complicada.
Vamos dar um exemplo dessa colisão:
Muita gente pergunta: Como fazer quando o inimigo me ver ele me seguir?
-Bom, o uso mais útil desse código serve para isso. Vamos aprender a fazer isso nesta aula.
Engine, para estudarmos os seus códigos:
Como funciona o sistema:
A função collision_line detecta colisões por uma linha reta. Seus argumentos explicados:
- Código:
collision_line(x1,y1,x2,y2,obj,prec,notme)
x1: posição x da primeira ponta da linha
y1: posição y da primeira ponta da linha
x2: posição x da segunda ponta da linha
y2: posição y da segunda ponta da linha
obj: objeto a ser checado ao entrar na área de colisão
prec: true para checagem pixel por pixel, false para retângulo
notme: desconsiderar esse objeto ao estar na linha de colisão
Retorna: ID da instância do obj que entrar na linha de colisão, tornando a expressão verdadeira. Caso não ocorra retorna -4, tornando a expressão falsa.
Vá ao step do inimigo e veja o seguinte código:
- Código:
//Guarda na variável a ID do bloco que ficar na linha de colisão
colide_bloco=collision_line(x+16,y+16,player.x+16,player.y+31,bloco,0,0)
O valor retornado por collsion_line é armazenado na variável colide_bloco.
A primeira ponta é no inimigo:
x+16: Ou seja, 16 pixels à direita.
y+16: Ou seja, 16 pixels à baixo.
A segunda ponta é no player:
player.x+16: Ou seja, 16 pixels à direita.
player.y+16: Ou seja, 16 pixels à baixo.
Você deve estar se perguntando: e esse bloco?
Bom, o que impede o inimigo de te ver? Lógico que é uma parede. Então esse será o objeto que impede o inimigo de correr atrás de você.
Ainda no evento step do inimigo:
- Código:
//Se não há uma instancia de bloco na colisão
if (!colide_bloco)
{
//Se existe player
if instance_exists(player)
{
//Segui o player
mp_potential_step(player.x+16,player.y+16,2,false)
}
}
- Código:
//Se a sprite spr_direita não existir
if not sprite_exists(spr_direita)
{
//Mostra mensagem
show_message("A spr_direita não existe")
}
- Código:
mp_potential_step(x,y,speed,checkall)
x: posição x que deve ser seguida
y: posição y que deve ser seguida
speed: velocidade que deve seguir
checkall: true para desviar de todos objetos, false para desviar apenas dos sólidos
Vamos as coordenadas x e y que ele vai seguir:
player.x+16
player.y+16
Ou seja ele vai seguir o player.
Pronto. Esse é o código para o inimigo te seguir. Mas você quer ter certeza que existe mesmo uma linha de colisão? Então vamos pintar uma linha para identificar a colisão:
Abra o objeto controle e vá no evento Draw :
- Código:
//Código abaixo acontece com o inimigo
with(inimigo)
{
//se a linha colide com bloco (inimigo não vê o player) a cor é vermelha
if colide_bloco then draw_set_color(c_red)
//se a linha não colide com bloco (inimigo vê o player) a cor é verde
if !colide_bloco then draw_set_color(c_lime)
//Desenha linha nas mesmas coordenadas dadas no collision_line
draw_line(x+16,y+16,player.x+16,player.y+16)
}
A linha vai ficar verde quando estiver livre o trajeto do inimigo até o player e vermelha quando não estiver:
Lembrando uma coisa muito importante. Colocamos o código de colisão somente no inimigo, logo todas as suas réplicas poderão seguir o player. Mas e se por acaso existir mais de um objeto player?
Os inimigos vão seguir somente o primeiro player adicionado na room.
Se quiser que varias instâncias de um objeto sigam as várias instâncias de outro objeto, baixe a engine:
São códigos mais complexos, e para não atrapalhar essa aula prefiro deixar só a engine.
Ufa! Terminamos! Fácil né? Agora é só jogar e ver o que acontece.
Se tiver duvidas perguntem!
FLWS!
Última edição por Alex FC em Seg 09 Fev 2015, 20:26, editado 12 vez(es) (Motivo da edição : Atualização)
Re: #COL Aula 03 - Colisões lineares
Nossa Agora mais um motivo XD, Valew ai essa segunda parte me ajudou muito, espero mais.
tata139- Data de inscrição : 11/08/2008
Reputação : 3
Número de Mensagens : 1121
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 03 - Colisões lineares
no começo eu entendo... depois quando chega na metade é tanta informação que minha mente trava.....
isso que eu chamo de memória de PC.... um PC bem ruim!!!
isso que eu chamo de memória de PC.... um PC bem ruim!!!
Re: #COL Aula 03 - Colisões lineares
O link para download do engine do jogo, para começar do zero não está funcionado, poderia arrumar?
Sobre o tutu, tá bem legal tó aprendendo muito...
Sobre o tutu, tá bem legal tó aprendendo muito...
juniorcuru- Data de inscrição : 25/01/2010
Reputação : 0
Número de Mensagens : 15
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 03 - Colisões lineares
vai me ajudar muito kra ... vlw!
chaampignon- Data de inscrição : 12/09/2009
Reputação : 1
Número de Mensagens : 124
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: #COL Aula 03 - Colisões lineares
Link da engine concertado. Boa aula a todos, e qualquer dúvida é só perguntar!
FLWS!
FLWS!
Re: #COL Aula 03 - Colisões lineares
Aula atualizada - 23/10/12:
- Melhora na grafia e explicação;
- Atualização das engines;
- Atualização das imagens.
Ps: As próximas aulas serão atualizadas em breve.
FLWS!
- Melhora na grafia e explicação;
- Atualização das engines;
- Atualização das imagens.
Ps: As próximas aulas serão atualizadas em breve.
FLWS!
Tópicos semelhantes
» #COL Aula 02 - Colisões retangulares
» #COL Aula 01 - Colisões simples
» #COL Aula 04 - Colisões circulares e de pontos
» [Resolvido] Vetorizar objetos Lineares?
» [Vídeo-Aula]Aula 4.1 - Usando funções básicas do draw
» #COL Aula 01 - Colisões simples
» #COL Aula 04 - Colisões circulares e de pontos
» [Resolvido] Vetorizar objetos Lineares?
» [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