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
» 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

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