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
Dúvida sobre animações de batalha
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):
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?
Re: Dúvida sobre animações de batalha
- 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.
Re: Dúvida sobre animações de batalha
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;
}
}
Re: Dúvida sobre animações de batalha
Código: Selecionar todos
var posxplayer = obj_player.x;
var posyplayer = obj_player.y;
Código: Selecionar todos
move_towards_point(posxplayer, posyplayer, 20);
Acho que é isso que está acontecendo.
Re: Dúvida sobre animações de batalha
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: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.
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;
}
}
Re: Dúvida sobre animações de batalha
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.
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx
Re: Dúvida sobre animações de batalha
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;
}
}
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;
}
}
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?
Re: Dúvida sobre animações de batalha
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;
}
}
Re: Dúvida sobre animações de batalha
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;
}
Re: Dúvida sobre animações de batalha
Código: Selecionar todos
encerrandoatk = true;
alarm[0] = .2 * room_speed;
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?
Re: Dúvida sobre animações de batalha
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.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?
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?
Re: Dúvida sobre animações de batalha
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.
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx
Re: Dúvida sobre animações de batalha
Muito obrigado pelas dicas, vou tentar adaptar tudo e melhorar kkk.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.
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?
Re: Dúvida sobre animações de batalha
O xstart e o ystart é a posição inicial do objeto, não precisa declará - los não.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?
Também é possível altera - los.
Re: Dúvida sobre animações de batalha
Re: Dúvida sobre animações de batalha
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.
Re: Dúvida sobre animações de batalha
Conseguir fazer ele voltar do jeito que eu queria graças a sua ajuda. Obrigado mais uma vez :DZalliant 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.
Re: Dúvida sobre animações de batalha
DanielLSF, eu gostaria de ver como está indo o seu game, poderia nos enviar um .exe ?
Re: Dúvida sobre animações de batalha
Por enquanto tô só montando o sistema de batalha, criei o mapa da batalha e o mapa que leva a batalha.Zalliant escreveu:Que isso amigo
DanielLSF, eu gostaria de ver como está indo o seu game, poderia nos enviar um .exe ?
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.
Re: Dúvida sobre animações de batalha
Qualquer duvida meu cara pode perguntar, caso eu não saiba há muito aqui melhores que eu.
Abraços
Quem está online
Usuários navegando neste fórum: Ahrefs [Bot] e 9 visitantes