GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Qualidade GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por joaoneto em Sab 14 Fev 2009, 10:17

Na 1º lição de GM RPG aprendemos a criar um movimento com Clique de mouse, no estilo dos jogos atuais, porém usando um char Isométrico.
Muitas pessoas não tem muita noção e acham que um jogo Isométrico é um jogo na diagonal.
Isto é verdade em relação aos gráficos, mas o que realmente muda é a proporção do movimento.
Num jogo isométrico, o movimento na horizontal é sempre 2 vezes proporcional ao movimento na vertical, formando assim a idéia de um losango.
Todo e qualquer movimento ou cenário nesse tipo de jogo deve seguir este padrão.
Na aula passada eu disse que aprenderíamos sobre movimento de Mobs(Inimigos). A sigla Mob é muito usada hoje nos jogos Online, talvez pelo tamanho da palavra.

Você já usou Paths no GM? se não, hoje será uma boa chance de ver como funciona e como criar e modificar paths usando GML.

O que faremos será criar um Path, com GML, e fazer nosso Mob seguir o mesmo.
Pra quem já fez jogos em RPGMaker sabe que rafemos o mesmo tipo de movimento quando se cria um evento e coloca-se nele uma rota-pré-definida.

O uso de Paths nesse caso não precisa se limitar aos Mobs, ele pode ser usado para NPCs e objetos de cenário.
Vamos começar.
Antes de mais nada um detalhe: estaremos usando a mesma idéia de Sprites da aula passada. Eu ainda estou desenvolvendo a ferramenta de criação, assim que ela estiver pronta eu disponibilizarei.
Enquanto isso, use a imagem abaixo para nosso exemplo de Mob:

Crie um sprite, chame-o de Zumbi. Repita os passos de criação do Strip, como na aula passada, lembrando de deixar o ultimo quadro branco.

Vamos exercitar a criação de um Path? Crie um novo Path na pasta, e vá clicando na tela e movendo os pontos até ficarem assim:

Observe que fizemos uma elípse. na verdade esse exercício de Paths é apenas para que você saiba depois criar seus próprios paths.
Não iremos usar este que criamos. Porque? Simples: O Path funciona na tela exatamente aonde você o criou. Se tentarmos mudar as coordenadas dele em tempo de execução, TODOS os objetos que compartilharem o path irão para aquela posição.
Crie um script, chame-o de elipse_path, e adione nele o seguinte código:
Código:
X = argument0;
Y = argument1;
ind = path_add();
path_set_kind(ind,argument2) //0 - Reta, 1 = Curva
path_add_point(ind,X,Y, 32,100);
path_add_point(ind,X,Y, 96,100);
path_add_point(ind,X 80,Y, 128,100);
path_add_point(ind,X 144,Y, 128,100);
path_add_point(ind,X 224,Y, 96,100);
path_add_point(ind,X 224,Y, 32,100);
path_add_point(ind,X 144,Y,100);
path_add_point(ind,X 80,Y,100);
return ind;
Observe que nos comandos path_add_point estamos colocando as posições X e Y passadas como parãmetro mais o posicionamento baseado naquele path oval que desenhamos.
A idéia é que, para cada Tipo de Path que você crie, haja um script de criação para o mesmo, de forma que vários objetos poderão compartinhar do tipo de movimento, sem compartilhar o mesmo Path e consequentemente havendo falhas no seu jogo.
Para já vermos a bagaça funcionando de várias formas, crie outro script, nomeie-o de circulo_path e adicione o seguinte código:
Código:
X = argument0;
Y = argument1;
ind = path_add();
path_set_kind(ind,argument2)//0 - Reta, 1 = Curva
path_add_point(ind,X,Y, 64,100);
path_add_point(ind,X,Y, 128,100);
path_add_point(ind,X 64,Y, 192,100);
path_add_point(ind,X 128,Y, 192,100);
path_add_point(ind,X 192,Y, 128,100);
path_add_point(ind,X 192,Y, 64,100);
path_add_point(ind,X 128,Y,100);
path_add_point(ind,X 64,Y,100);
return ind;
Agora temos dois tipos de movimento para testar.
Crie um objeto, chame-o de MOB, coloque o Sprite do Zumbi. Adicione os Eventos Create e Draw. Agora em cada um coloque assim:
Evento Create:
Código:
ind = circulo_path(x,y,1);
path_start(ind,2,1,true);
speed = 1.0;
image_speed=0.3;
image_index=6;
old_dir = 1;
Evento Draw:
Código:
facing = round(direction / 45);
if facing == 8 then facing = 0;
direcao = (facing * 4);
if old_dir == 1 {
    old_dir = direcao;
    image_index = direcao;
}
if (old_dir != direcao){
    old_dir = direcao;
    image_index = direcao;
}
if (round(image_index) >= direcao  4) {image_index = direcao;}
draw_sprite(sprite_index,image_index,x,y);
Mas o que foi feito aqui??
Bem, vou explicar:
No evento Create, declaramos uma variável ind, que recebe o path criado pelo script circulo_path. Setamosas variáveis de movimento e de imagem, e criamos uma old_dir. Esta variável nos ajudará a saber se o mob mudou de direção, para podermos mudar também o seu sprite.
No evento Draw, encontramos a direção do objeto e usamos uma divisão por 45 para obtermos 8 direções. Fazemos uma correção nos cálculos, pois precisamos do valor entre 1 e 7, Setamos a direção. Validamos se a direção mudou e se sim, mudamos novamente o seu valor, e no final fazemos a mesma jogada que foi feita com o personagem na aula passada.
Por fim desenhamos o Sprite.
Para testar, crie uma Room, adicione vários Zumbis em lugares diferentes e rode.
Se todos os passos foram seguidos, seu mob vai andar lindo num movimento circular excelente. Para mudar o movimento, teste o script elipse_path no lugar do circulo.
Agora como execício, crie seus próprios Paths. Para ter certeza do desenho que eles descreverão, crie primeiro um path atoa e desenhe nele. Anote os valores dos pontos e use-os como nos scripts que criamos.

Algumas pessoas sempre põem dificuldade em criar, por ser mais fácil pegar pronto na Net. Eu discordo, e provo que com o Game Maker é possível fazer qualquer tipo de jogo, basta que você seja criativo e esforçado. Ninguém precisa saber tudo, até eu mesmo pesquiso as vezes para encontrar modelos de engines e adaptá-los à minha necessidade.

Na Próxima lição: Menus Flutuantes estilo Ragnarok. Até lá.


Última edição por joaoneto em Seg 16 Fev 2009, 00:19, editado 1 vez(es)

joaoneto

Número de Mensagens : 36
Idade : 39
Data de inscrição : 08/05/2008
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.deploy.net.br

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por vinians em Sab 14 Fev 2009, 15:41

Oi amigo, seu tutorial está ótimo, como sempre. Gostaria apenas de dizer o seguinte:
Na verdade não precisa do script para as path veja o comando:
path_start(path,speed,endaction,absolute) Inicia uma path para instância atual.
Descrição dos parâmetros:

path- a path que vc definiu na interface
speed-velocidade da path
endaction- ação a ser executada no final da path
  • 0-finaliza a path
  • 1-continua do começo
  • 2-continua da ultima posicao
  • 3-inverte a path

absolute-se true fica como vc disse mais se for false ele fica RELATIVO. Então ele pega a posição atual da instancia na qual se está atribuindo a path.

Isso foi só pra exclarecer, pois seu tambem método funciona.

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por joaoneto em Sab 14 Fev 2009, 18:27

vinians escreveu:Oi amigo, seu tutorial está ótimo, como sempre. Gostaria apenas de dizer o seguinte:
Na verdade não precisa do script para as path veja o comando:
path_start(path,speed,endaction,absolute) Inicia uma path para instância atual.
Descrição dos parâmetros:

path- a path que vc definiu na interface
speed-velocidade da path
endaction- ação a ser executada no final da path
  • 0-finaliza a path
  • 1-continua do começo
  • 2-continua da ultima posicao
  • 3-inverte a path

absolute-se true fica como vc disse mais se for false ele fica RELATIVO. Então ele pega a posição atual da instancia na qual se está atribuindo a path.

Isso foi só pra exclarecer, pois seu tambem método funciona.
Obrigado pela observação grande amigo. Isso mostra que pode-se então criar os Paths e usá-los sem a necessidade de se usar os scripts,
mais uma opção para aqueles que são pouco familiarizados com os mesmos, como eu Happy.

joaoneto

Número de Mensagens : 36
Idade : 39
Data de inscrição : 08/05/2008
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.deploy.net.br

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por xxxAKIRAxxx em Dom 15 Fev 2009, 23:37

o meu deu erro.><


espero q me ajudem.

wow menu de ragnarok essa nun posso perder.
vlw.

xxxAKIRAxxx

Número de Mensagens : 108
Idade : 26
Data de inscrição : 04/02/2009
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   : 1
   :

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por joaoneto em Seg 16 Fev 2009, 00:18

cara, olha na sua sintaxe que ficou faltando uma virgula entre o Y e o 32.
Vou ter que começar a postar código fonte junto, toda vez que eu vou postar Code ele come algum pedaço e fica dando esses erros.

joaoneto

Número de Mensagens : 36
Idade : 39
Data de inscrição : 08/05/2008
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.deploy.net.br

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por xxxAKIRAxxx em Ter 17 Fev 2009, 16:42

valew cara.

xxxAKIRAxxx

Número de Mensagens : 108
Idade : 26
Data de inscrição : 04/02/2009
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   : 1
   :

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por zurao23 em Dom 15 Nov 2009, 18:31

o meu deu erro

esse erro aki:

___________________________________________
COMPILATION ERROR in Script: elipse_path
Error in code at line 5:
path_add_point(ind,X,Y, 32,100);

at position 32: Wrong number of arguments to function or script.

zurao23

Número de Mensagens : 6
Data de inscrição : 14/11/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por zurao23 em Dom 15 Nov 2009, 18:36

tem como alguem me ajudar?

Editado por CPinheiro: double posts são proibídos.
Avisado.

zurao23

Número de Mensagens : 6
Data de inscrição : 14/11/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por itallo em Seg 16 Nov 2009, 11:16

path_add_point(ind,X,Y, 32,100);
veja tem um espaço entre a virgula e o 32

troca por isso: path_add_point(ind,X,Y,32,100);

itallo

Ranking : Sem avaliações
Número de Mensagens : 969
Idade : 24
Data de inscrição : 26/08/2009
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   :
   :

http://www.zuluhotel.com.br

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por Denis Lemos em Seg 16 Nov 2009, 15:01

Mas é lógico que isso não vai funcionar... Está cheio de erros !

Por exemplo:path_add_point(ind,x,y,speed) vejam bem; essa função tem apenas "4 argumentos" !
Agora olhe quantos ele colocou no script dele :path_add_point(ind,X,Y, 32,100) Ali tem cinco argumentos, já vai dar um erro de cara !

Eu corrigi eu vou colocar aqui do jeito que não deu erro, pelomenos aqui para mim:
Aqui é os códigos do script '' elipse_path " corrigido:
Código:
X = argument0;
Y = argument1;
ind = path_add();
path_set_kind(ind,argument2) //0 - Reta, 1 = Curva
path_add_point(ind,X,Y+32,100);
path_add_point(ind,X,Y+96,100);
path_add_point(ind,X+80,Y+128,100);
path_add_point(ind,X+144,Y+128,100);
path_add_point(ind,X+224,Y+96,100);
path_add_point(ind,X+224,Y+32,100);
path_add_point(ind,X+144,Y,100);
path_add_point(ind,X+80,Y,100);
return ind;
E aqui do " circulo_path " :
Código:
X = argument0;
Y = argument1;
ind = path_add();
path_set_kind(ind,argument2)//0 - Reta, 1 = Curva
path_add_point(ind,X,Y+64,100);
path_add_point(ind,X,Y+128,100);
path_add_point(ind,X+64,Y+192,100);
path_add_point(ind,X+128,Y+192,100);
path_add_point(ind,X+192,Y+128,100);
path_add_point(ind,X+192,Y+64,100);
path_add_point(ind,X+128,Y,100);
path_add_point(ind,X+64,Y,100);
return ind;
Esse é do " Evento Create " objeto, esse está correto e não muda nada :
Código:
ind = circulo_path(x,y,1);
path_start(ind,2,1,true);
speed = 1.0;
image_speed=0.3;
image_index=6;
old_dir = 1;
E esse é do " Evento Draw " do objeto :
Código:
facing = round(direction / 45);
if facing == 8 then facing = 0;
direcao = (facing * 4);
if old_dir == 1 {
    old_dir = direcao;
    image_index = direcao;
}
if (old_dir != direcao){
    old_dir = direcao;
    image_index = direcao;
}
if (round(image_index) >= direcao + 4) {image_index = direcao;}
draw_sprite(sprite_index,image_index,x,y);

Nesse último, só faltou colocar ali no código bem em baixo, entre " direcao 4 " faltou um sinal, não sei qual era o sinal original dele , eu coloquei o de adição = "+", e funcionou direitinho !

Bom teste agora e diga se deu certo !

Hà... Tirando esses errinhos, que concerteza foi na digitação e não por ele não saber, que fique bem claro isso;
O tutorial está muito bom ! Parabéns !!!

Obs : Eu testei isso com uma única sprite com somente uma sub-imagem !

Denis Lemos

Número de Mensagens : 938
Idade : 28
Data de inscrição : 17/05/2009
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por zurao23 em Qui 19 Nov 2009, 18:11

Denis, cara valeu, isso me salvou. vc me ajdo muito cara, VLW mesmo, te adoro

zurao23

Número de Mensagens : 6
Data de inscrição : 14/11/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por romulo_rla em Dom 31 Out 2010, 21:14

Denis, valeu meu!
Tutorial muito bom!


OBS PARA O DENIS: Eu também moro aqui no RS!

romulo_rla

Número de Mensagens : 45
Idade : 26
Data de inscrição : 02/09/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.zoomdicas.blogspot.com

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por TriniBoi em Dom 14 Nov 2010, 12:13

Não sei se estou revivendo mas a regra diz que se tiver dúvidas em tutos pode Happy

O meu da esse erro akie:


Código:
___________________________________________
ERROR in
action number 1
of Create Event
for object Mob:

In script circulo_path:
Error in code at line 3:
  ind = path_add();
        ^
at position 8: This function is only available in the Pro Edition.

Ou seja, essa função só é possível no Pro, tem como alguém mudar o code pro Lite pf!?

TriniBoi

Número de Mensagens : 273
Idade : 18
Data de inscrição : 15/10/2010
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por Fuzenrad em Dom 14 Nov 2010, 12:50

Ou seja, essa função só é possível no Pro, tem como alguém mudar o code pro Lite pf!?
Creio que não seja possível modificar o código _path, a solução seria você registrar o programa.

Obs: O tópico da sua dúvida foi removido.

Fuzenrad

Ranking : Nota A
Número de Mensagens : 1026
Idade : 26
Data de inscrição : 04/07/2010
Notas recebidas : A-A-A-A-B
Reputação : 41
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por KhalDrogo em Sab 26 Jan 2013, 05:27

Como faço para deixar algo com movimentos aleatorios?

KhalDrogo

Número de Mensagens : 7
Data de inscrição : 24/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por DVictorPS em Sex 01 Mar 2013, 23:52

cara me passa a parte 1 deste tutorial por favor?

DVictorPS

Ranking : Nota D
Número de Mensagens : 100
Idade : 14
Data de inscrição : 23/01/2012
Notas recebidas : D+E+C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: GM RPG - 2º Lição - Movimento de Mobs(Inimigos) isométrico de RPG

Mensagem por Conteúdo patrocinado Hoje à(s) 23:54


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum