Entrar
Últimos assuntos
» Retorno da GMBR!!!por theguitarmester Ter 19 Mar 2024, 22:38
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» 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
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?
» [Engine] Pathfinding Simples
» [Trancado] adaptar pathfinding
» [Vídeo-Aula] Aula 4 - Variáveis
» A* pathfinding - LITE?
» [Engine] Pathfinding Simples
» [Trancado] adaptar pathfinding
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|