Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Dúvida sobre animações de batalha

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Dúvida sobre animações de batalha

Mensagem por DarlesLSF » Sex Set 21, 2018 3:01 am

Boa noite,
Gostaria de saber como faço as animações de batalha no GM? No caso, das magias. Segue abaixo um exemplo de um jogo que fiz no rpg maker (quando eu uso Golpe Flamejante):
Imagem
A animação que me refiro é a das chamas.
Devo pegar o spritesheet dessas chamas e montar os frames ou há um programa que eu possa usar pra montar a animação e depois importá-la para o GM?

Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 620
Localização: Dourados-MS

Contato:

Re: Dúvida sobre animações de batalha

Mensagem por All-x » Sex Set 21, 2018 11:17 am

Há várias maneiras de fazer isso. A mais fácil:
  • Pegar uma sprite animada do fogo.
  • Criar um objeto eff_fogo e colocar a sprite acima.
  • No evento Other -> Animation End colocar:

    Código: Selecionar todos

    instance_destroy();
  • E criar esse objeto quando o ataque ocorrer usando instance_create.
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Re: Dúvida sobre animações de batalha

Mensagem por DarlesLSF » Sex Set 21, 2018 11:52 am

Testei aqui e acontece esse erro:
Imagem

Abaixo o código:

Código: Selecionar todos

if (global.atacando_inimigos == true) && (global.inimigo_atual == 1)
{   
    var posxplayer = obj_player.x;
    var posyplayer = obj_player.y;
    global.aff_normal = false;
    sprite_index = spr_aff_atacando1;
    image_speed = spd;
    if distance_to_point(obj_inimigo1.x, obj_inimigo1.y) > 70
    {
        move_towards_point(obj_inimigo1.x - 70, obj_inimigo1.y  + 20, 20);
    } 
        else 
        { 
            speed = 0;
            sprite_index = spr_aff_atacando2;
            instance_create(obj_inimigo1.x, obj_inimigo1.y, anima_ataque_normal);
            move_towards_point(posxplayer, posyplayer, 20);
            global.atacando_inimigos = false;
            global.aff_normal = true;
                                       
        }
    
}
Mesmo colocando o distance_to_point, ele passa reto.

Avatar do usuário
Midgard
Novato
Novato
Reações: 0
Mensagens: 15

Re: Dúvida sobre animações de batalha

Mensagem por Midgard » Sex Set 21, 2018 1:02 pm

,[

Código: Selecionar todos

var posxplayer = obj_player.x;
    var posyplayer = obj_player.y;

Código: Selecionar todos

 move_towards_point(posxplayer, posyplayer, 20);
Pelo que entendi depois da primeira movimentação, digamos na segunda verificação, ele atualizou a posição do obj_player com a posição atual depois do move_towards, enquanto o valor global.atacando_inimigos == true ele atualiza as variáveis, recebendo a mesma posição e adicionado a velocidade 20, ou seja, ele não retornou para posição inicial, por isso continuo para a direita.
Acho que é isso que está acontecendo.

Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Re: Dúvida sobre animações de batalha

Mensagem por DarlesLSF » Sáb Set 22, 2018 3:50 am

Midgard escreveu: Pelo que entendi depois da primeira movimentação, digamos na segunda verificação, ele atualizou a posição do obj_player com a posição atual depois do move_towards, enquanto o valor global.atacando_inimigos == true ele atualiza as variáveis, recebendo a mesma posição e adicionado a velocidade 20, ou seja, ele não retornou para posição inicial, por isso continuo para a direita.
Acho que é isso que está acontecendo.
Eu tirei as variáveis do step event e coloquei elas como global no create event. Agora o jogador vai até o monstro, ataca e volta. O problema é que ele não tá parando na volta agora, passa reto da posição que é pra ir. Segue o código:
global.posxaff e posyaff são criadas em outro objeto no início da batalha, pra pegar a localização inicial do jogador.

Código: Selecionar todos

if (distance_to_point(global.posxaff, global.posyaff)) > 0 
    {
        move_towards_point(global.posxaff, global.posyaff, 20);
    }
    else
    {
        speed = 0;
        global.aff_normal = true;
        with (obj_inimigo1)
        {
            image_blend = c_white;
        }
    
    }
E aqui o que acontece:
Imagem

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Dúvida sobre animações de batalha

Mensagem por None » Dom Set 23, 2018 1:16 am

O jeito mais simples seria dividir o seu código em avançando (ou atacando) e voltando.
O de avançar já esta feito, só poderia estar um pouco mais bem organizado.
O que você faria é garantir que ao final da animação (eu não vi no código como você esta lidando com a animação) ele iria para o momento de voltando.
Você pode lidar ele do jeito que esta lidando, e fazer o teste usando o xstart e o ystart, se o x - xstart < 20 (por exemplo) então x = xstart, desta forma ele volta para a posição inicial, eu usaria um lerp para não deixar forçada a transição, mas isso é um detalhe.
depois de definir o x = xstart e o y = ystart você tira ele do voltando, e pronto ele deve ficar parado.

Depois dê uma olhada neste vídeo
https://youtu.be/irDKx_vCYsE

Eu não sei como você esta lidando com a animação, mas aconselho a NESTE caso não usar o evento animation end, o vídeo que vem depois do que eu postei mostra uma maneira mais controlada de lidar com o final e o inicio da animação.

Você não precisa (e tecnicamente não deveria) tornar as variáveis globais, o escopo delas já abrange todo o player, basta cria-las (sem o var) dentro do create event, variáveis globais geralmente são criadas para que outros objetos possam acessa-las.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Re: Dúvida sobre animações de batalha

Mensagem por DarlesLSF » Dom Set 23, 2018 8:49 am

Então, a animação ela tá separada.
Aqui seria a parte em que o jogador ataca:

Código: Selecionar todos

if (global.atacando_inimigos == true) && (global.inimigo_atual == 1)
    {   
        global.aff_poses = 0;
        sprite_index = spr_aff_atacando1;
        image_speed = spd;
        if distance_to_point(obj_inimigo1.x, obj_inimigo1.y) > 70
        {
            move_towards_point(obj_inimigo1.x - 50, obj_inimigo1.y  + 20, 18);
        } 
        else 
        { 
            speed = 0;
            sprite_index = spr_aff_atacando2; 
            instance_create(obj_inimigo1.x - 20, obj_inimigo1.y, anima_ataque_normal);
            audio_play_sound(atacando_inimigo, 1, false);
            with (obj_inimigo1)
            {
            image_blend = c_red;
            }
            encerrandoatk = true;
            alarm[0] = .2 * room_speed; 
            global.atacando_inimigos = false;                           
        }    
    
}
E dentro do alarm[0], eu coloquei a parte em que ele volta do ataque:

Código: Selecionar todos

if (encerrandoatk == true) && (global.inimigo_atual == 1) // voltando do ataque
{   
    with (obj_inimigo1)
    {
        image_blend = c_white;
    }
    
        if (distance_to_point(global.posxaff, global.posyaff) > 1)
            {
                move_towards_point(global.posxaff, global.posyaff, 18);
            }
            else
            {
                speed = 0;
                if (health > (global.max_hp / 10) * 3)
                {
                    global.aff_poses = 1;
                }
                else
                {
                    global.aff_poses = 2;
                }
                encerrandoatk = false;
            }       
}
Como dito antes, o erro só acontece quando o jogador vai voltar. Mesmo depois que a distance_to_point fica <= 1, ele não para de andar e acaba saindo da tela.
Tentei usar o xstart e ystart, mas como o jogador é criado em outra room, ele pega outra posição. Onde eu deveria colocar essas variáveis?

Imagem

Avatar do usuário
Midgard
Novato
Novato
Reações: 0
Mensagens: 15

Re: Dúvida sobre animações de batalha

Mensagem por Midgard » Dom Set 23, 2018 3:29 pm

Você informou que colocou no alarm[0] o código abaixo, tenta ao invés de usar o alarm, adicionar no end step
E dentro do alarm[0], eu coloquei a parte em que ele volta do ataque:
Código:
if (encerrandoatk == true) && (global.inimigo_atual == 1) // voltando do ataque
{
with (obj_inimigo1)
{
image_blend = c_white;
}

if (distance_to_point(global.posxaff, global.posyaff) > 1)
{
move_towards_point(global.posxaff, global.posyaff, 18);
}
else
{
speed = 0;
if (health > (global.max_hp / 10) * 3)
{
global.aff_poses = 1;
}
else
{
global.aff_poses = 2;
}
encerrandoatk = false;
}
}

Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Re: Dúvida sobre animações de batalha

Mensagem por DarlesLSF » Dom Set 23, 2018 3:46 pm

Dessa vez deu certo, ele vai e volta. Só que agora ele ataca muito rápido e volta.
Imagem

Como faço pra ele atacar, esperar um pouco e voltar, como nos outro gifs que postei acima? E também, como faço pra voltar a animação?
To usando esse código pras "poses" do jogador durante a batalha:

Código: Selecionar todos

switch (global.aff_poses)
    {
    case 1:      // estado normal
        obj_player.sprite_index = spr_affbatalha;
        image_speed = 3.5;
        break;
    case 2:     // pouca vida
        obj_player.sprite_index = spr_aff_poucavida;
        image_speed = 3.5;
        break;
    case 3:    // morto
        obj_player.sprite_index = spr_affdeitado;
        image_speed = 3.5;
        break;
}

Avatar do usuário
Midgard
Novato
Novato
Reações: 0
Mensagens: 15

Re: Dúvida sobre animações de batalha

Mensagem por Midgard » Dom Set 23, 2018 4:04 pm

Para ele aguardar um pouco para voltar, observer o seguinte código que já havia feito anteriormente:

Código: Selecionar todos

encerrandoatk = true; 
alarm[0] = .2 * room_speed; 
Cria o alarm e dentro do alarm adiciona o valor true na variável encerrandoatk.

Assim a condição do end step só será iniciada quando encerrandoatk receber o valor depois do tempo determinado no alarm.

Sobre a animação não entendi muito bem, você diz, assim como no rpg maker aparecer novamente a seleção de ataque ou magia?

Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Re: Dúvida sobre animações de batalha

Mensagem por DarlesLSF » Dom Set 23, 2018 6:53 pm

Sobre a animação não entendi muito bem, você diz, assim como no rpg maker aparecer novamente a seleção de ataque ou magia?
Não. Observa quando ele entra na batalha, ele fica naquela sprite em posição de batalha, se mexendo, antes de atacar. Depois que ele volta do ataque, essa animação da sprite fica estática, não se mexe, mesmo eu colocando no código a image_speed = 3.5.

Outra coisa: eu achei meio "cagado" o jeito que o jogador volta depois que ataca, eu estava pensando em fazer ele pulando ao ponto inicial. Pra fazer isso, eu deveria usar criar um path em forma de meio circulo ou dá pra fazer isso usando o move_towards_point?

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Dúvida sobre animações de batalha

Mensagem por None » Seg Set 24, 2018 12:27 am

Para voltar a animação é só retornar a image_speed ao valor inicial.

O xstart e ystart são referentes apenas a room atual, teoricamente não haveria necessidade de criar uma variável para checar a posição, enfim.

Seu código possui uns problemas de abstração, você não pode NUNCA neste tipo de contexto se referir a um objeto diretamente.
Todas as vezes que você usou obj_inimigo1 você deve substituir por inimigo_atual, porque se não seu código inteiro vai estar referenciado um objeto especifico e caso na luta tenha algum outro inimigo ou duas instâncias do mesmo inimigo seu jogo vai dar problema (um exemplo é a cobra não mudando de cor).

A mesma lógica se aplica ao personagem principal, caso você queira herdar os códigos dele (ou duplicar mesmo) para outros herois você vai precisar parar de fazer referências absolutas e focar em referências relativas, você vai precisar tirar estas variaveis globais sobre a pose do herói e torna-las variaveis normais.

Sei que sua base são meus vídeos do youtube, mas conforme você for avançando na série você vai ver que eu foco nisso e explico como corrigir estes problemas, como aplicar a state machine (que deixa todo o trabalho MUITO mais fácil), mas este tipo de coisas é bom fazer antes de avançar muito no projeto.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Re: Dúvida sobre animações de batalha

Mensagem por DarlesLSF » Seg Set 24, 2018 8:06 am

None escreveu:Para voltar a animação é só retornar a image_speed ao valor inicial.

O xstart e ystart são referentes apenas a room atual, teoricamente não haveria necessidade de criar uma variável para checar a posição, enfim.

Seu código possui uns problemas de abstração, você não pode NUNCA neste tipo de contexto se referir a um objeto diretamente.
Todas as vezes que você usou obj_inimigo1 você deve substituir por inimigo_atual, porque se não seu código inteiro vai estar referenciado um objeto especifico e caso na luta tenha algum outro inimigo ou duas instâncias do mesmo inimigo seu jogo vai dar problema (um exemplo é a cobra não mudando de cor).

A mesma lógica se aplica ao personagem principal, caso você queira herdar os códigos dele (ou duplicar mesmo) para outros herois você vai precisar parar de fazer referências absolutas e focar em referências relativas, você vai precisar tirar estas variaveis globais sobre a pose do herói e torna-las variaveis normais.

Sei que sua base são meus vídeos do youtube, mas conforme você for avançando na série você vai ver que eu foco nisso e explico como corrigir estes problemas, como aplicar a state machine (que deixa todo o trabalho MUITO mais fácil), mas este tipo de coisas é bom fazer antes de avançar muito no projeto.
Muito obrigado pelas dicas, vou tentar adaptar tudo e melhorar kkk.
Sò fiquei na dúvida ainda quanto ao xstart e o ystart. Eu preciso declará-los no Create antes de usá-los ou posso simplesmente colocá-los dentro do código?

Avatar do usuário
Zalliant
Programador
Programador
Reações: 0
Mensagens: 52

Contato:

Re: Dúvida sobre animações de batalha

Mensagem por Zalliant » Seg Set 24, 2018 11:40 am

Sò fiquei na dúvida ainda quanto ao xstart e o ystart. Eu preciso declará-los no Create antes de usá-los ou posso simplesmente colocá-los dentro do código?
O xstart e o ystart é a posição inicial do objeto, não precisa declará - los não.
Também é possível altera - los.

Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Re: Dúvida sobre animações de batalha

Mensagem por DarlesLSF » Ter Set 25, 2018 9:27 am

Aproveitando o tópico, tem algum meio de fazer ele não voltar em linha reta, mas sim como o gráfico abaixo?
Imagem

Avatar do usuário
Zalliant
Programador
Programador
Reações: 0
Mensagens: 52

Contato:

Re: Dúvida sobre animações de batalha

Mensagem por Zalliant » Ter Set 25, 2018 10:11 am

Bom dia,
Huum, creio que poderia usar path amigo.
Dei uma experimentada, você pode criar um path:

Código: Selecionar todos

path_start(path,speed,endaction,absolute);
speed: A velocidade positiva faz ele seguir o caminho, já caso negativo é o inverso.
endaction: Ação final, aqui diz o que será feito quando for atingido a posição final, no caso 0 é para parar.
absolute: Diz se é relativo ao personagem ou a room, no caso false é relativo ao personagem.

Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Re: Dúvida sobre animações de batalha

Mensagem por DarlesLSF » Ter Set 25, 2018 1:06 pm

Zalliant escreveu:Bom dia,
Huum, creio que poderia usar path amigo.
Dei uma experimentada, você pode criar um path:

Código: Selecionar todos

path_start(path,speed,endaction,absolute);
speed: A velocidade positiva faz ele seguir o caminho, já caso negativo é o inverso.
endaction: Ação final, aqui diz o que será feito quando for atingido a posição final, no caso 0 é para parar.
absolute: Diz se é relativo ao personagem ou a room, no caso false é relativo ao personagem.
Conseguir fazer ele voltar do jeito que eu queria graças a sua ajuda. Obrigado mais uma vez :D

Avatar do usuário
Zalliant
Programador
Programador
Reações: 0
Mensagens: 52

Contato:

Re: Dúvida sobre animações de batalha

Mensagem por Zalliant » Ter Set 25, 2018 1:26 pm

Que isso amigo
DanielLSF, eu gostaria de ver como está indo o seu game, poderia nos enviar um .exe ?

Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Re: Dúvida sobre animações de batalha

Mensagem por DarlesLSF » Ter Set 25, 2018 2:11 pm

Zalliant escreveu:Que isso amigo
DanielLSF, eu gostaria de ver como está indo o seu game, poderia nos enviar um .exe ?
Por enquanto tô só montando o sistema de batalha, criei o mapa da batalha e o mapa que leva a batalha.
Faz pouco tempo que comecei a mexer no game maker. Antes eu usava o rpg maker, então tô meio que me baseando nele pra fazer as coisas no GM. Só que aqui há funções novas pra mim, que simplificam um eito de trabalho haha
Mas assim que eu finalizar essa parte, começo o enredo e posto aqui uma demo.

Avatar do usuário
Zalliant
Programador
Programador
Reações: 0
Mensagens: 52

Contato:

Re: Dúvida sobre animações de batalha

Mensagem por Zalliant » Ter Set 25, 2018 2:28 pm

Opa maravilha,
Qualquer duvida meu cara pode perguntar, caso eu não saiba há muito aqui melhores que eu.
Abraços

Responder

Quem está online

Usuários navegando neste fórum: Google [Bot] e 5 visitantes