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
[Tutorial] Patrulha Top-Down
2 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
[Tutorial] Patrulha Top-Down
SISTEMA DE PATRULHA TOP-DOWN
Bom, vou ensinar como criar um sistema de patrulha para jogos top-down, é simples.
1. Definindo as configurações de patrulha: Primeiramente vamos definir as configurações da patrulha no Create do objeto:
Sendo que:
2. Definindo os pontos de patrulha: Abaixo dos últimos códigos definiremos os pontos de patrulha x e y usando arrays: (MÉTODO 1)
Sempre seguindo a array, e definindo a n° de patrulhas ao fim...
Se você quiser faço como eu (MÉTODO 2), crie um script chamado adicionar_ponto_patrulha(x,y) com o seguinte conteúdo:
O código acima então ficará assim:
A variável patrulha_total já terá o valor 3 automaticamente por causa do script.
3. Movimentação de patrulha:
Agora no Step do objeto vai o sistema de movimentação:
if patrulhar=true vai checar se a variável de patrulha do objeto está ativada, se sim, mp_potential_step vai fazer com que ele ande até o ponto de patrulha atual. if distance_to_point vai checar se ele chegou, se sim, passar pro próximo. if ponto_atual >= patrulha_total checa se ele passou por todos os pontos, e se a variável fim_patrulha for true, ele para, caso contrário, ele vai voltar pro primeiro ponto e fazer tudo de novo.
ADICIONAIS
1. Desenhando os pontos para Debugging: Crie uma variável qualquer (no meu caso nomeei w) no Create com valor 0:
E no Draw use:
Isso vai desenhar a sprite e círculos nos pontos de patrulha do objeto.
2. Use a relatividade à posição atual para poder usar vários objetos: Ao invés de usar apenas números para dar um ponto de patrulha, você pode usar em relação ao xy do objeto:
Assim você poderá colocar vários objetos iguais e eles irão patrulhar, sem ir pro mesmo lugar.
3. Crie um "delay time": Caso você queira que o objeto, ao chegar em um ponto, dê uma parada para depois continuar, crie uma variável delay no create, siga meu exemplo se quiser:
Agora subsititua essa parte do código normal de movimentação:
Por esse:
E no evento Alarm 0 use:
Assim ele vai esperar 40 frames antes de ir pro próximo ponto.
Talvez ponha mais alguns adicionais posteriormente, mas por enquanto é isso. VALEU!
Bom, vou ensinar como criar um sistema de patrulha para jogos top-down, é simples.
1. Definindo as configurações de patrulha: Primeiramente vamos definir as configurações da patrulha no Create do objeto:
- Código:
patrulhar=true
fim_patrulha=false
ponto_atual=0
patrulha_total=0
Sendo que:
- patrulhar define se esse objeto vai patrulhar ou não.
- fim_patrulha define se ele vai parar após passar por todos os pontos de patrulha.
- patrulha_total definirá por quantos pontos ele passará, deixe 0.
- ponto_atual define o ponto inicial, deixe 0 caso não saiba o que está fazendo.
2. Definindo os pontos de patrulha: Abaixo dos últimos códigos definiremos os pontos de patrulha x e y usando arrays: (MÉTODO 1)
- Código:
patrulha_x[0]=20
patrulha_y[0]=20
patrulha_x[1]=150
patrulha_y[1]=50
patrulha_x[2]=80
patrulha_y[2]=180
patrulha_total=3
Sempre seguindo a array, e definindo a n° de patrulhas ao fim...
Se você quiser faço como eu (MÉTODO 2), crie um script chamado adicionar_ponto_patrulha(x,y) com o seguinte conteúdo:
- Código:
patrulha_x[patrulha_total]=argument0
patrulha_y[patrulha_total]=argument1
patrulha_total+=1
O código acima então ficará assim:
- Código:
adicionar_ponto_patrulha(20,20)
adicionar_ponto_patrulha(150,50)
adicionar_ponto_patrulha(80,180)
A variável patrulha_total já terá o valor 3 automaticamente por causa do script.
3. Movimentação de patrulha:
Agora no Step do objeto vai o sistema de movimentação:
- Código:
if patrulhar=true
{
mp_potential_step(patrulha_x[ponto_atual],patrulha_y[ponto_atual],2,0)
if distance_to_point(patrulha_x[ponto_atual],patrulha_y[ponto_atual]) <=0
{
ponto_atual+=1
}
if ponto_atual >= patrulha_total
{
if fim_patrulha = true
{
patrulhar=false
}
else
{
ponto_atual=0
}
}
}
if patrulhar=true vai checar se a variável de patrulha do objeto está ativada, se sim, mp_potential_step vai fazer com que ele ande até o ponto de patrulha atual. if distance_to_point vai checar se ele chegou, se sim, passar pro próximo. if ponto_atual >= patrulha_total checa se ele passou por todos os pontos, e se a variável fim_patrulha for true, ele para, caso contrário, ele vai voltar pro primeiro ponto e fazer tudo de novo.
ADICIONAIS
1. Desenhando os pontos para Debugging: Crie uma variável qualquer (no meu caso nomeei w) no Create com valor 0:
- Código:
w=0
E no Draw use:
- Código:
draw_sprite(sprite_index,image_index,x,y)
for (w=0; w<patrulha_total; w+=1)
{
draw_circle_color(patrulha_x[w],patrulha_y[w],5,c_red,c_red,1)
}
Isso vai desenhar a sprite e círculos nos pontos de patrulha do objeto.
2. Use a relatividade à posição atual para poder usar vários objetos: Ao invés de usar apenas números para dar um ponto de patrulha, você pode usar em relação ao xy do objeto:
- Código:
adicionar_ponto_patrulha(x+20,y+20)
adicionar_ponto_patrulha(x+150,y+50)
adicionar_ponto_patrulha(x+80,y+180)
Assim você poderá colocar vários objetos iguais e eles irão patrulhar, sem ir pro mesmo lugar.
3. Crie um "delay time": Caso você queira que o objeto, ao chegar em um ponto, dê uma parada para depois continuar, crie uma variável delay no create, siga meu exemplo se quiser:
- Código:
delay=40
Agora subsititua essa parte do código normal de movimentação:
- Código:
if distance_to_point(patrulha_x[ponto_atual],patrulha_y[ponto_atual]) <=0
{
ponto_atual+=1
}
Por esse:
- Código:
if distance_to_point(patrulha_x[ponto_atual],patrulha_y[ponto_atual]) <=0
{
patrulhar=false
alarm[0]=delay
}
E no evento Alarm 0 use:
- Código:
ponto_atual+=1
patrulhar=true
Assim ele vai esperar 40 frames antes de ir pro próximo ponto.
Talvez ponha mais alguns adicionais posteriormente, mas por enquanto é isso. VALEU!
Gonçalves- Games Ranking :
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios :
x 0 x 4 x 0
x 2 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] Patrulha Top-Down
.E aí cara blz?
.Vi apenas um pequeno erro no seu código...
.Dessa maneira o alarm[0] não sera executado nunca,vai ser sempre =delay.
Isso deve resolver.
.Quando o alarm executa ele fica com valor -1,então só de o alarm se o valor dele for -1.
.Até mais
.Vi apenas um pequeno erro no seu código...
- Código:
if distance_to_point(patrulha_x[ponto_atual],patrulha_y[ponto_atual]) <=0
{
patrulhar=false
alarm[0]=delay
}
.Dessa maneira o alarm[0] não sera executado nunca,vai ser sempre =delay.
Isso deve resolver.
- Código:
if distance_to_point(patrulha_x[ponto_atual],patrulha_y[ponto_atual]) <=0 a
{
patrulhar=false
if(alarm[0]=-1){alarm[0]=delay}
}
.Quando o alarm executa ele fica com valor -1,então só de o alarm se o valor dele for -1.
.Até mais
Thyago- Games Ranking :
Notas recebidas : D+B+B+C+A
Data de inscrição : 24/08/2009
Reputação : 31
Número de Mensagens : 1101
Prêmios :
x 0 x 0 x 0
x 1 x 1 x 0
x 0 x 0 x 0
Re: [Tutorial] Patrulha Top-Down
Então cara, esse código só ocorre se patrulhar for true, e antes de ativar o alarme definiu ela como false (sendo ativada novamente apenas no alarme).
Mas valeu a intenção! XD
Mas valeu a intenção! XD
Gonçalves- Games Ranking :
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios :
x 0 x 4 x 0
x 2 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] Patrulha Top-Down
Verdade,esta mais para cima,desculpe entao :-)
Thyago- Games Ranking :
Notas recebidas : D+B+B+C+A
Data de inscrição : 24/08/2009
Reputação : 31
Número de Mensagens : 1101
Prêmios :
x 0 x 0 x 0
x 1 x 1 x 0
x 0 x 0 x 0
Tópicos semelhantes
» GM RPG - 1º Lição - Criando um char com movimento isométrico de RPG
» [Tutorial] 39dll Tutorial - Part II(Final)
» [Tutorial] 39dll Tutorial - Part I
» Como fazer com que a view siga 2 ou mais objeto?
» tutorial de mmo
» [Tutorial] 39dll Tutorial - Part II(Final)
» [Tutorial] 39dll Tutorial - Part I
» Como fazer com que a view siga 2 ou mais objeto?
» tutorial de mmo
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos