[Resolvido]Como incorporar offsets em animações por script?

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

Resolvido [Resolvido]Como incorporar offsets em animações por script?

Mensagem por telles0808 em Seg 17 Jan 2011, 09:34

Fala pessoal,

Gostaria de saber como posso incorporar offsets em animações por script.

A princípio, tenho uma idéia de como funcionaria, mas não consigo por isso em prática.

O objetivo final é uma animação que fique igual a essa:



O arquivo teste é esse: http://irgames.com.br/R001_editado.gmk

Como é feito o jogo. Inicialmente, em cada sprite existem várias "cabeças", "troncos" e um conjunto de pernas e braços.

As pernas e braços serão as mesmas para todos os personagens, já o conjunto de cabeças e troncos serão exclusivos de cada tipo de personagem.

A montagem deles foi feita dizendo ao objeto que se o personagem X for escolhido, usar a sprite index X correspondente a ele.

Não quero parecer confuso e nem complicar o que pode ser simples, então direto ao assunto.

Imagine uma sprite com 1 frame somente. Quero fazer essa frame ir pra cima e pra baixo, sem precisar animá-la na sprite, ou seja, usando script. Se houver uma forma de manipular frames e durações que não seja a velocidade e index de sprites, então acho que daria pra fazer.


Última edição por telles0808 em Seg 17 Jan 2011, 12:56, editado 1 vez(es)

telles0808

Número de Mensagens : 22
Data de inscrição : 14/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Como incorporar offsets em animações por script?

Mensagem por Markituh em Seg 17 Jan 2011, 10:35

Espera, acho que sei o que você quer dizer. Você quer separar cada parte do corpo, e animá-las individualmente? Bom, isso é possível, basta apenas fazer a estrutura no Draw. Seria necessário para isso várias condições com variáveis, posição x e tudo mais, que com paciência e tempo você faz beleza. Vou lhe mostrar um esquema que possa até dar certo.

Você irá utilizar surfaces, uma para cada parte do corpo. Dessa forma, basta só dar draw_surface na hora de "movimentar" que já está feito.
Código:
cabeca = surface_create(largura,altura)
tronco = surface_create(largura,altura)
perna_esquerda = surface_create(largura,altura)
perna_direita = surface_create(largura,altura)
braco_esquerdo = surface_create(largura,altura)
braco_direito = surface_create(largura,altura)
Agora, só é desenhar nas surfaces a sprite respectiva ao membro.
Código:
surface_set_target(cabeca)
draw_sprite(cabeca,0,0,0)
surface_reset_target()
surface_set_target(tronco)
draw_sprite(tronco,0,0,0)
surface_reset_target()
surface_set_target(perna_esquerda)
draw_sprite(perna_esquerda,0,0,0)
surface_reset_target()
surface_set_target(perna_direita)
draw_sprite(perna_direita,0,0,0)
surface_reset_target()
surface_set_target(braco_esquerdo)
draw_sprite(braco_esquerdo,0,0,0)
surface_reset_target()
surface_set_target(braco_direito)
draw_sprite(braco_direito,0,0,0)
surface_reset_target()
Então, você faz o "movimento" no Step, modificando as variáveis que realizam o movimento da sprite.
Código:
if movimento_atual = andar_direta
{
cabeca_x = 10
cabeca_y = 10
}
Um código assim. Então no Draw, finalmente:
Código:
draw_surface(cabeca,cabeca_x,cabeca_y)
E assim por diante nos demais membros. Eu apenas dei uma base, cabe a você tentar resolver sozinho tomando em conta o que eu disse, e o que outros membros irão dizer.

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Como incorporar offsets em animações por script?

Mensagem por telles0808 em Seg 17 Jan 2011, 11:52

Código:

{
  if (keyboard_check(vk_right)) or (keyboard_check(vk_left)) or (keyboard_check(vk_up)) or (keyboard_check(vk_down)) and (jump = 0) or (atk =0)
  {
    spd = 4;
      if (keyboard_check(vk_left)) {x -= spd};
      if (keyboard_check(vk_right)) {x += spd};
      if (keyboard_check(vk_up)) {y -= spd};
      if (keyboard_check(vk_down)) {y += spd};
  }

  frames_stand_by = 04; //duração da animação stand_by
  frames_walking = 12;
 
  if animation = stand_by;
  {
    total_frames = frames_stand_by; //puxar a duração da animação
    frame rate = 3; //não sei em GML qual comando faz a taxa de frames por segundo
    pos_head_x = {x + 10}; //posição inicial da cabeça
    pos_head_y = {y + 10};
    sprite_index = 1;
 
    if side = right;
      {
        image_xcale = 1;
        frame 01 = draw_sprite (head,1,pos_head_x,pos_head_y); //Não faço idéia de como manipular um frame por script, então coloquei só de exemplo
        frame 02 = draw_sprite (head,1,pos_head_x,pos_head_y + 2);
        frame 04 = draw_sprite (head,1,pos_head_x,pos_head_y + 1);
      }

    if side = left;
      {
        image_xcale = -1;
        frame 01 = draw_sprite (head,1,pos_head_x,pos_head_y); //Não faço idéia de como manipular um frame por script, então coloquei só de exemplo
        frame 02 = draw_sprite (head,1,pos_head_x,pos_head_y + 2);
        frame 04 = draw_sprite (head,1,pos_head_x,pos_head_y + 1);
      }

  if animation = walking
  {
    total_frames = frames_walking; //puxar a duração da animação
    frame rate = 3; //não sei em GML qual comando faz a taxa de frames por segundo
    pos_head_x = {x + 10}; //posição inicial da cabeça
    pos_head_y = {y + 10};
    sprite_index = 5;
 
    if side = right;
      {
        image_xcale = 1;
        frame 01 = draw_sprite (head,1,pos_head_x,pos_head_y); //Não faço idéia de como manipular um frame por script, então coloquei só de exemplo
        frame 02 = draw_sprite (head,1,pos_head_x,pos_head_y - 1);
        frame 04 = draw_sprite (head,1,pos_head_x + 1,pos_head_y);
      }

    if side = left;
      {
        image_xcale = -1;
        frame 01 = draw_sprite (head,1,pos_head_x,pos_head_y); //Não faço idéia de como manipular um frame por script, então coloquei só de exemplo
        frame 02 = draw_sprite (head,1,pos_head_x,pos_head_y - 1);
        frame 04 = draw_sprite (head,1,pos_head_x - 1,pos_head_y);
      }
}


Ou seja, iria fazer o que poderia ser feito com a edição de sprites. Porém, para não ficar editando 10.000 sprites, já que o jogo terá vários personagens, eu gostaria de saber se é possível fazer essas animações através de scripts, assim eu só digo ao GML qual static sprite usar e ele fará a animação conforme a condição, frame a frame, ou em uma duração de frames, como no exemplo, do frame 1 ao 6, etc.

telles0808

Número de Mensagens : 22
Data de inscrição : 14/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Como incorporar offsets em animações por script?

Mensagem por Alex FC em Seg 17 Jan 2011, 12:28

Fiz um script para você na sua engine, veja se está bom:

http://www.herosh.com/download/7197427/R001_editado.rar.html

Você é livre para rotacionar a sprite (por image_angle), pois ela não ficará com os membros girados individualmente e sim todos ao mesmo tempo, como se fosse a mesma sprite. Preste atenção na variável de deslocamento. Se você aproveita-la bem poderá fazer maravilhas e economizar muitas sprites.

Espero que ajude. Vlw?

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Como incorporar offsets em animações por script?

Mensagem por telles0808 em Seg 17 Jan 2011, 12:55

Alex FC escreveu:Fiz um script para você na sua engine, veja se está bom:

http://www.herosh.com/download/7197427/R001_editado.rar.html

Você é livre para rotacionar a sprite (por image_angle), pois ela não ficará com os membros girados individualmente e sim todos ao mesmo tempo, como se fosse a mesma sprite. Preste atenção na variável de deslocamento. Se você aproveita-la bem poderá fazer maravilhas e economizar muitas sprites.

Espero que ajude. Vlw?

FLWS!

A hahahah! aahhh muleke!! vou te dar uma, ops, sem empolgação! hahahaha

Era exatamente isso que eu pretendia, sim, é para poupar sprites, já que fiz tudo no flash antes e agora estou "portando" pra GML porque o flash ficou muito pesado.

Bom, com isso acho que dará para fazer todo resto, agora só preciso entender como fazer um cenário em paralelo, e o sistema de colisão, pulo, etc, em cenário de plataforma com profundidade. vlw.

telles0808

Número de Mensagens : 22
Data de inscrição : 14/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Como incorporar offsets em animações por script?

Mensagem por Conteúdo patrocinado Hoje à(s) 03:50


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