Página 1 de 1
Parar animação de um sprite / congelar animação no ultimo frame
Enviado: Ter Mai 26, 2020 12:06 am
por arthuzinho0705
Sou iniciante e estou tentando fazer com que meu personagem, quando pule ou caia, que congele a imagem no ultimo frame:
no meu caso:
animação CAINDO tem 25 frames
quero que quando o ultimo frame for reproduzido que ele congele até cair no chão.
a minha animação está dando loop, nao quero isso, quero que ela congele a ultima imagem,
preciso de um tutorial completo, pois talvez eu esteja fazendo algo errado la do começo
Re: Parar animação de um sprite / congelar animação no ultimo frame
Enviado: Ter Mai 26, 2020 12:22 am
por Chuaschinai
Pode ser mais simples do que pensa, faz assim pra ver se funciona:
Se e o numero da imagem atual for maior que os 25 frames, ele define que a imagem deve ser então o ultimo frame, você pode usar um numero direto ao invés do sprite_get_number().
Código: Selecionar todos
if(image_index >= sprite_get_number(sprite_index)-1){
image_index = sprite_get_number(sprite_index)-1;
}
Dependendo da velocidade da sprite ele pode não funcionar, porque velocidades muito altas fazem frames pularem, dai terá que usar outra maneira.
Edit:
A melhor forma de usar e até mais prática do que a dita a cima, é usar o evento
AnimationEnd, criando esse evento é só colocar dentro dele assim:
Código: Selecionar todos
if(sprite_index == sua_sprite){
image_index = sprite_get_number(sua_sprite)-1;
}
Ele checa se a sprite atual chegou no final da animação, fazendo com que defina a ultima sprite.
Re: Parar animação de um sprite / congelar animação no ultimo frame
Enviado: Ter Mai 26, 2020 12:44 am
por arthuzinho0705
tentei colocar esse codigo, mas não tive êxito.
preciso entender do 0, aonde colocar, se devo usar alguma variavel.
o meu codigo é pequeno estou começando ainda, se quiser posso mandar aqui.
inclusive, quando meu personagem pula ele faz a animação de subir, mas chega no ponto 0 ele parece q entra no sprite parado e assim que desce ele entra na sprite caindo.
mas vamos resolver primeiro o loop que me incomoda mais
Re: Parar animação de um sprite / congelar animação no ultimo frame
Enviado: Ter Mai 26, 2020 12:51 am
por arthuzinho0705
segue meus codigos:
Step: Clique para ver o conteúdo
/// correndo
#region //controles
key_right = keyboard_check(ord("D")) // direita
key_left = keyboard_check(ord("A")) //esquerda
key_up = keyboard_check(ord("W")) //pulo
key_down = keyboard_check(ord("S")) //abaixa
#endregion
#region //movimentação
var move = key_right - key_left
hspd = move * spd;
vspd = vspd + grv;
if (hspd != 0) image_xscale = sign(hspd);
//colisão horiszontal
if place_meeting(x+hspd,y,obj_chao)
{
while(!place_meeting(x+sign(hspd),y,obj_chao))
{
x = x + sign(hspd);
}
hspd = 0;
}
x = x + hspd
//colisão vertical
if place_meeting(x,y + vspd,obj_chao)
{
while(!place_meeting(x,y + sign(vspd),obj_chao))
{
y = y + sign(vspd);
}
vspd = 0;
}
y = y + vspd
//Pulo
if place_meeting(x,y+1,obj_chao) and key_up
{
vspd -=8
}
#endregion
#region troca de sprites
if (!place_meeting(x, y+1, obj_chao))
{
sprite_index = spr_stick_pulando
if (sign(vspd) >= 0)
{ sprite_index = spr_stick_caindo if(image_index >= sprite_get_number(spr_stick_caindo)-1){
image_index = sprite_get_number(spr_stick_caindo)-1;
}
}
else {sprite_index = spr_stick_pulando
}}
else
{
if (hspd !=0)
{
sprite_index = spr_stick_correndo
}
}
if hspd = 0 {
if place_meeting(x,y+1, obj_chao)
{
sprite_index = spr_stick_parado
}
}
if hspd !=0 {
if place_meeting (x,y+1, obj_chao)
{
sprite_index = spr_stick_correndo
}
}
#endregion
Re: Parar animação de um sprite / congelar animação no ultimo frame
Enviado: Ter Mai 26, 2020 9:40 am
por Chuaschinai
Testei aqui seu código, e parece estar tudo certo, somente na animação que ele sobe ele fica em loop, então eu coloquei o mesmo código no
AnimationEnd e funcionou tudo normal.
Aquele primeiro código que te passei, ele tinha que ser baseado na
sprite_index talvez por isso não estivesse funcionando, porém o segundo com toda certeza funciona. Tente assim:
Basicamente retire o primeiro código que te mandei:
Código: Selecionar todos
if(image_index >= sprite_get_number(spr_stick_caindo)-1){
image_index = sprite_get_number(spr_stick_caindo)-1;
}
E Coloque no AnimationEnd o mesmo código só que para quando estiver subindo:
Código: Selecionar todos
if(sprite_index == spr_stick_caindo){
image_index = sprite_get_number(spr_stick_caindo)-1;
}
if(sprite_index == spr_stick_pulando){
image_index = sprite_get_number(spr_stick_pulando)-1;
}
Ou seja quando ele estiver subindo ele realizará somente um loop, e quando estiver caindo também.
O
AnimationEnd serve para coisas como esta, quando você especifica qual
sprite_index é a atual, você pode fazer uma lógica baseada no seu ultimo frame.
Dessa forma que te passei, com certeza deve funcionar.
Re: Parar animação de um sprite / congelar animação no ultimo frame
Enviado: Ter Mai 26, 2020 11:44 am
por arthuzinho0705
Opa, vou testar assim que eu puder, e te respondo aqui.
Re: Parar animação de um sprite / congelar animação no ultimo frame
Enviado: Ter Mai 26, 2020 1:32 pm
por arthuzinho0705
Então, eu coloquei e não resolveu...
mas...
eu notei uma coisa que estava acontecendo e eu nao tinha visto...
a animação reinicia muito antes dos ultimos frames... ou seja, a animação não está indo até o fim... ela da o loop antes de terminar... talvez o erro esteja ai
EDIT:
Alterei a altura do pulo, na subida esta tudo ok, só na descida mesmo q ta bugando.
E acredito q o bug q ta dando qdo ele chega no pico do pulo seja o loop dando erro na descida
Re: Parar animação de um sprite / congelar animação no ultimo frame
Enviado: Ter Mai 26, 2020 2:46 pm
por Chuaschinai
Você colocou no AnimationEnd quando ele esta caindo também?, porque eu testei aqui e tinha funcionado com o seu código, ele só rodava uma vez
e permanecia no ultimo frame sem problemas, tanto na animação de subida quanto na de descida.
Re: Parar animação de um sprite / congelar animação no ultimo frame
Enviado: Ter Mai 26, 2020 7:49 pm
por arthuzinho0705
ANIMATION END
Código: Selecionar todos
if(sprite_index == spr_stick_caindo){
image_index = sprite_get_number(spr_stick_caindo)-1;
}
if(sprite_index == spr_stick_pulando){
image_index = sprite_get_number(spr_stick_pulando)-1;
}
Mano, to começando a suspeitar da minha animação, ou algo q nao configurei direito.
to fazendo upload das imagens no meu album aqui do forum, interessante ter isso num forum... kkkk nao sabia, assim nao preciso mandar aqui