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
Aula Avancada - Pathfinding
4 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Aula Avancada - Pathfinding
Pathfinding
Essa é a primeira aula da serie "Aulas avançadas". Houve um atraso, era para ser ontem, mas nao deu, entao vai ser hoje.
Essa aula é um pouco avancada e pode ser feita em qualquer versão do Game Maker, mas é recomendada para as versoes: e .
Introdução
Se voce nao sabe o que é pathfinding, aqui esta a tradução:
'path' - caminho
'finding' - procurando
'pathfinding' - procurando caminho
Pathfinding é muito usado em jogos 2D com visao Top Down, assim o inimigo acha o caminho mais perto que deve seguir desviando dos obstaculos, como arvores, caixas e paredes.
Vamos comecar entao.
1 - Crie uma sprite que sera a parede, com tamanho 16x16 px.
2 - Crie outra sprite que sera o player, com tamanho 8x8 px.
Agora voce deve criar tres objetos, 1 para o player, 1 para a parede e 1 para ser o controlador.
Coloque as sprites no player e na parede. Chame como quiser os objetos.
Objeto Controlador
CREATE- Código:
global.mpgrid=mp_grid_create(0,0,room_width/16,room_height/16,16,16)//cria um plano de movimento, criando quadrados de 16 pixels em toda a room
mp_grid_add_instances(global.mpgrid,obj_parede,0)//adiciona a parede nessa grade
PAREDE
Coloque ele como solido e com depth 1.PLAYER
CREATE- Código:
mypath=path_add() //adiciona um path (caminho) para ele seguir depois
COLISAO COM PAREDE:
- Código:
move_bounce_solid(1);//'rebate' na parede
- Código:
draw_sprite(sprite_index,-1,x,y)//desenha a sprite
draw_set_alpha(0.2)//transparencia
draw_set_color(c_aqua) //cor da agua
draw_path(mypath,x,y,1)//desenhar o caminho, voce vera no jogo
draw_set_alpha(1)//tirar a transparencia
draw_set_color(c_red);//cor vermelho
draw_circle(mouse_x,mouse_y,8,0)//desenhar um circulo vermelho no mouse
draw_set_color(0);
- Código:
var dx,dy; //cria variaveis
dx=floor(mouse_x/16)*16+8;//faz o x do mouse ser multiplo de 16
dy=floor(mouse_y/16)*16+8;//faz o y do mouse ser multiplo de 16
if !mp_grid_path(global.mpgrid,mypath,x,y,dx,dy,true) //checa se nao existe um caminho
{
var x1,y1,x2,y2; //mais variaveis
for (i=0; i<path_get_number(mypath); i+=1) //checa os pontos do caminho
{
x1=path_get_point_x(mypath,i); // x1 pega o valor do ponto 'i' do path
y1=path_get_point_y(mypath,i); //y1 pega o valor do ponto 'i' do path
x2=path_get_point_x(mypath,i+1);//x2 pega o valor do ponto seguinte
y2=path_get_point_y(mypath,i+1);//y2 pega o valor do ponto seguinte
if collision_line(x1,y1,x2,y2,block,false,true)//ve se tem uma colisao com a parede entre os dois pontos
{
dx=x1; //faz com que o dx seja o x1
dy=y1; //faz a mesma coisa o dy
break;
}
}
mp_grid_path(global.mpgrid,mypath,x,y,dx,dy,true); //recria o path com os pontos certos e com a possibilidade de mover diagonalmente
path_start(mypath,8,0,1);//mover o player pelo path
}
else //se existir o caminho
{
mp_grid_path(global.mpgrid,mypath,x,y,dx,dy,true); //cria o path...
path_start(mypath,8,0,1); //mover o player pelo path
}
É isso ai, terminamos a aula, coloque os blocos (parede) na room em forma de labirinto, o controlador e o player. Ai teste o jogo e clique em algum lugar que nao tenha parede. Vera que ele desvia da parede e vai para onde voce clicou, se existir um caminho.
Até mais!
Última edição por Pedrø em Qua 25 Abr 2012, 23:40, editado 2 vez(es)
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Aula Avancada - Pathfinding
.__. Legal, bem legal... Lembro que o itarodrigo postou um tutorial de como fazer isso, mas o desvio era imperfeito e ele se movia antes mesmo de checar no objeto... Por que será? Acho que o teu código está com configurações para arrumar isso.
Bom, não creio que ele seja feito para essa função mas... Coloquei várias paredes misturadas, deixando brechas é claro, então quando clico no que se pode dizer a "saída" daquela algazarra, ele calcula o caminho errado e trava no bloco. POR QUE SERÀ? >_<
Uma imagem para entender melhor. Pode ver que a linha azul está certa, mas o player redondamente errado >_< Tipo, se o obj_parede está abaixo do player, e a pessoa clicar abaixo do obj_parede, o player vai tentar passar por cima do bloco ao invés de dar a volta >_< A linha calcula certo, mas o problema é o player, na sprite dele =/ Mas bom tutorial Pedro, vai ajudar muita gente... Será? Meu argumento é falho =|
Bom, não creio que ele seja feito para essa função mas... Coloquei várias paredes misturadas, deixando brechas é claro, então quando clico no que se pode dizer a "saída" daquela algazarra, ele calcula o caminho errado e trava no bloco. POR QUE SERÀ? >_<
Uma imagem para entender melhor. Pode ver que a linha azul está certa, mas o player redondamente errado >_< Tipo, se o obj_parede está abaixo do player, e a pessoa clicar abaixo do obj_parede, o player vai tentar passar por cima do bloco ao invés de dar a volta >_< A linha calcula certo, mas o problema é o player, na sprite dele =/ Mas bom tutorial Pedro, vai ajudar muita gente... Será? Meu argumento é falho =|
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Aula Avancada - Pathfinding
Voce criou os sprites com tamanhos certos?
Porque se voce colocou um tamanho diferente para o player, tem que por a speed no mesmo tanto, nao sei porque, mas da certo. Tem que colocar a parede como solida tambem.
Manda a engine para mim ver se nao conseguir.
FLW
Porque se voce colocou um tamanho diferente para o player, tem que por a speed no mesmo tanto, nao sei porque, mas da certo. Tem que colocar a parede como solida tambem.
Manda a engine para mim ver se nao conseguir.
FLW
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Aula Avancada - Pathfinding
Ambas as sprites são de 32x32, o problema é que ele não faz a volta, ele vai pra cima do bloco. A linha mostra a volta, mas como tem direção vertical para baixo no começo da linha, aí ele trava no bloco. Deve ser algum código que adiciona valores iniciais na vspeed não importa a circunstância...
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Aula Avancada - Pathfinding
ele disse:
1 - Crie uma sprite que sera a parede, com tamanho 16x16 px.
2 - Crie outra sprite que sera o player, com tamanho 8x8 px.
não:
1 - Crie uma sprite que sera a parede, com tamanho 32x32 px.
2 - Crie outra sprite que sera o player, com tamanho 32x32 px.
1 - Crie uma sprite que sera a parede, com tamanho 16x16 px.
2 - Crie outra sprite que sera o player, com tamanho 8x8 px.
não:
1 - Crie uma sprite que sera a parede, com tamanho 32x32 px.
2 - Crie outra sprite que sera o player, com tamanho 32x32 px.
Kiko- Data de inscrição : 16/01/2011
Reputação : 2
Número de Mensagens : 188
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Aula Avancada - Pathfinding
Substitua os valores 16 por 32, assim:
global.mpgrid=mp_grid_create(0,0,room_width/32,room_height/32,32,32)//cria um plano de movimento, criando quadrados de 32 pixels em toda a room
E no mouse tambem:
dx=floor(mouse_x/32)*32+8;//faz o x do mouse ser multiplo de 32
dy=floor(mouse_y/32)*32+8;//faz o y do mouse ser multiplo de 32
global.mpgrid=mp_grid_create(0,0,room_width/32,room_height/32,32,32)//cria um plano de movimento, criando quadrados de 32 pixels em toda a room
E no mouse tambem:
dx=floor(mouse_x/32)*32+8;//faz o x do mouse ser multiplo de 32
dy=floor(mouse_y/32)*32+8;//faz o y do mouse ser multiplo de 32
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Aula Avancada - Pathfinding
Olá boa tarde!
otima iniciativa e uma otima dica para mim e muita gente que procurava um tutorial desse nivel. Esta de parabens.
Ficaria mais completo seu tutorial se vc postasse o projeto da aula do dia.
vlws
otima iniciativa e uma otima dica para mim e muita gente que procurava um tutorial desse nivel. Esta de parabens.
Ficaria mais completo seu tutorial se vc postasse o projeto da aula do dia.
vlws
Re: Aula Avancada - Pathfinding
Obrigado.
Como comecaram as aulas, houve alguns atrasos.
Mas eu nao esqueci das aulas.
Quando possivel, vou continuar as proximas...
FLW
Como comecaram as aulas, houve alguns atrasos.
Mas eu nao esqueci das aulas.
Quando possivel, vou continuar as proximas...
FLW
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Tópicos semelhantes
» [Vídeo-Aula]Aula 4.1 - Usando funções básicas do draw
» [Vídeo-Aula] Aula 4 - Variáveis
» A* pathfinding - LITE?
» Pathfinding com mais de um inimigo
» [Engine] Pathfinding Simples
» [Vídeo-Aula] Aula 4 - Variáveis
» A* pathfinding - LITE?
» Pathfinding com mais de um inimigo
» [Engine] Pathfinding Simples
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos