Entrar
Últimos assuntos
» Procuro Programador de game makerpor Wou Sex 15 Mar 2024, 10:27
» Retorno da GMBR!!!
por vinians Qui 14 Mar 2024, 19:07
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42
» 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
» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39
» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16
» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05
» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55
» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39
» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28
» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01
#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
|
|