GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por 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

Ir para baixo

Aula Avancada - Pathfinding Empty Aula Avancada - Pathfinding

Mensagem por PedroX Seg 31 Jan 2011, 19:17

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: GM7 e GM8.

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
DRAW
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);
GLOBAL MOUSE LEFT PRESSED:
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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Aula Avancada - Pathfinding Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

Aula Avancada - Pathfinding Empty Re: Aula Avancada - Pathfinding

Mensagem por Markituh Seg 31 Jan 2011, 19:59

.__. 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À? >_<
Aula Avancada - Pathfinding Afaffa
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
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : Aula Avancada - Pathfinding Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Aula Avancada - Pathfinding Empty Re: Aula Avancada - Pathfinding

Mensagem por PedroX Seg 31 Jan 2011, 21:44

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

_________________


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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Aula Avancada - Pathfinding Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

Aula Avancada - Pathfinding Empty Re: Aula Avancada - Pathfinding

Mensagem por Markituh Seg 31 Jan 2011, 21:47

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
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : Aula Avancada - Pathfinding Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Aula Avancada - Pathfinding Empty Re: Aula Avancada - Pathfinding

Mensagem por Kiko Seg 31 Jan 2011, 21:52

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.
Kiko
Kiko

Data de inscrição : 16/01/2011
Reputação : 2
Número de Mensagens : 188
Prêmios : Aula Avancada - Pathfinding Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Aula Avancada - Pathfinding Empty Re: Aula Avancada - Pathfinding

Mensagem por PedroX Ter 01 Fev 2011, 10:03

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

_________________


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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Aula Avancada - Pathfinding Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

Aula Avancada - Pathfinding Empty Re: Aula Avancada - Pathfinding

Mensagem por williamsp Qua 09 Mar 2011, 15:13

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 Razz
williamsp
williamsp

Data de inscrição : 26/01/2011
Reputação : 0
Número de Mensagens : 5
Prêmios : Aula Avancada - Pathfinding Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.receitasegostosuras.com

Ir para o topo Ir para baixo

Aula Avancada - Pathfinding Empty Re: Aula Avancada - Pathfinding

Mensagem por PedroX Qua 09 Mar 2011, 16:14

Obrigado.
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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Aula Avancada - Pathfinding Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

Aula Avancada - Pathfinding Empty Re: Aula Avancada - Pathfinding

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos