Avatar do usuário
DarlesLSF
Membro
Membro
Autor
Mensagens: 74
Registrado em: Qui Set 06, 2018 2:54 am
Localização: Humaitá - RS
Karma: 87

Dúvida sobre animações de batalha

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?

Tags:
 
Avatar do usuário
Alex FC
Administrador
Administrador
Mensagens: 460
Registrado em: Dom Abr 24, 2016 11:50 pm
Localização: Itaporã-MS
Karma: 558

Contato:

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

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:

    instance_destroy();

  • E criar esse objeto quando o ataque ocorrer usando instance_create.
1
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
Autor
Mensagens: 74
Registrado em: Qui Set 06, 2018 2:54 am
Localização: Humaitá - RS
Karma: 87

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

Sex Set 21, 2018 11:52 am

Testei aqui e acontece esse erro:
Imagem

Abaixo o código:
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
Mensagens: 15
Registrado em: Dom Jan 03, 2016 8:43 pm
Karma: 25

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

Sex Set 21, 2018 1:02 pm

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

 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.
1
 
Avatar do usuário
DarlesLSF
Membro
Membro
Autor
Mensagens: 74
Registrado em: Qui Set 06, 2018 2:54 am
Localização: Humaitá - RS
Karma: 87

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

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.
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
Mensagens: 158
Registrado em: Sáb Abr 14, 2018 8:11 pm
Karma: 321

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

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.
Cachorro-quente!!!

Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx
 
Avatar do usuário
DarlesLSF
Membro
Membro
Autor
Mensagens: 74
Registrado em: Qui Set 06, 2018 2:54 am
Localização: Humaitá - RS
Karma: 87

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

Dom Set 23, 2018 8:49 am

Então, a animação ela tá separada.
Aqui seria a parte em que o jogador ataca:
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:
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
1
 
Avatar do usuário
Midgard
Novato
Novato
Mensagens: 15
Registrado em: Dom Jan 03, 2016 8:43 pm
Karma: 25

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

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
Autor
Mensagens: 74
Registrado em: Qui Set 06, 2018 2:54 am
Localização: Humaitá - RS
Karma: 87

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

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:
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;
}
1
 
Avatar do usuário
Midgard
Novato
Novato
Mensagens: 15
Registrado em: Dom Jan 03, 2016 8:43 pm
Karma: 25

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

Dom Set 23, 2018 4:04 pm

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

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?
1

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante