Página 1 de 1

Problemas com animações

Enviado: Seg Dez 24, 2018 11:35 pm
por 186557
Estou com MUITOS problemas de animação com um player, pra facilitar, vou escrever oque cada sprite é:

spr_player_d1 = animação de andar pra direita
spr_player_e1 = animação de andar pra esquerda
spr_player_d2 = parado e olhando para a direita
spr_player_e2 = parado e olhando para a esquerda

Agora os problemas: Quando o player anda a animação de andar funciona normalmente, mas quando o player fica parado a animação continua (na verdade a animação nunca para e os spr_player_d2 e spr_player_e2 não funcionam).
Outro problema é a animação de pulo que quando o player pula para a direita por exemplo o sprite de pulo só funciona até o player atingir a altura maxima do pulo, na hora de cair ele volta com a animação de andar para a direita(mesma coisa com a esquerda), e a animação de pulo só funciona se for precionado "direita ou esquerda + pulo" se apertar só para pular ela não funciona.

//direita
if xspeed=5{sprite_index=spr_player_d1;image_speed=0.4}
if xspeed>5{sprite_index=spr_player_d2;image_speed=0.1}
//esquerda
if xspeed=-5{sprite_index=spr_player_e1;image_speed=0.4}
if xspeed<-5{sprite_index=spr_player_e2;image_speed=0.1}
}

//pulo
if yspeed = -12
{
if xspeed < 0 && y > other.y-12 {sprite_index=spr_pulo_esquerda;image_speed=1}
if xspeed > 0 && y < other.y-12 {sprite_index=spr_pulo_direita;image_speed=1}
}

Re: Problemas com animações

Enviado: Seg Dez 24, 2018 11:56 pm
por None
O seu código está meio confuso.

Por que você está checando se o xspeed é exatamente 5? Não deveria ser 0?


Você está usando other dentro do step event? E por que você está usando isso?

A lógica do seu código (para mim, ao menos) não faz muito sentido.

Para checar o lado, você pode simplesmente cria uma variável chamada lado/face/etc, 0 direita, 1 cima, 2 esquerda, 3 baixo.
Se o usuário pressionou para qualquer um desses lados, a variável lado recebe o valor específico, assim você não precisa checar a direção usando a velocidade dele mais.

Tendo feito isso você precisa definir prioridades, creio que a animação do pulo tenha prioridade em relação às demais, então você checa se ele está pulando (velocidade vertical é diferente de 0, ou ele não está no chão, como você lida com isso fica a seu gosto), depois disso você precisa checar se ele está subindo ou descendo, se a velocidade vertical for menor que zero ele está subindo, então ele usa a Sprite de subir, se não ele está descendo, Sprite de descer.

Em relação a de direita ou esquerda, basta colocar caso a velocidade vertical for diferente de 0 então o imagem xscale = sign(velocidade horizontal) e assim você nem precisa das Sprite dos dois lados (isso só funciona bem se a sua Sprite é centralizada na horizontal).

Re: Problemas com animações

Enviado: Ter Dez 25, 2018 1:15 am
por 186557
Desculpe, eu não entendi direito, pode me explicar melhor?
Me desculpe, eu uso o Game maker a pouco tempo e ainda tem bastante coisa que eu ainda não
sei exatamente como fazer (como variaveis)

Re: Problemas com animações

Enviado: Ter Dez 25, 2018 11:17 am
por AragaSam
Eu uso um código meio longo, mas que pra mim funcionou, vou copiar e colar e se não entender te explico, como comecei faz pouco tempo e não pude programar faz umas duas semanas por falta de tempo ele da bem iniciante mas não bugou (como o meu é pra aqueles jogos vistos de cima, top view ou top down não sei bem, é só apagar as partes de subir e descer caso precise pra um de plataforma e adaptar)

///////////
// ANDAR //
///////////

essa parte vai verificar a tecla que foi apertada e definir a direção e o sprite

if keyboard_check (ord ( "W" )) {
andar = true
cima = true
parado = false
vspeed=-1.5;
sprite_index = spr_player_movendo_cima
}

if keyboard_check (ord ( "S" )) {
andar = true
baixo = true
parado = false
vspeed=1.5;
sprite_index = spr_player_movendo_baixo
}

if keyboard_check (ord ( "A" )) {
andar = true
esquerda = true
parado = false
hspeed=-1.5;
sprite_index = spr_player_movendo_esquerda;
}

if keyboard_check (ord ( "D" )) {
andar = true
direita = true
parado = false
hspeed=1.5;
sprite_index = spr_player_movendo_direita;
}

essa parte vai fazer ele não ficar com duas variáveis pra direções opostas (estava programando uma mecânica de atirar flechas e isso ajudou)

if esquerda = true { direita = false }
if direita = true { esquerda = false }
if cima = true { baixo = false }
if baixo = true { cima = false }

/// parar de andar ao soltar a tecla

quando soltar a tecla o player para e mostra o sprite dele parado na direção certa

if keyboard_check_released (ord("W")) {
sprite_index = spr_player_parado_cima
parado = true
}

if keyboard_check_released (ord("S")) {
sprite_index = spr_player_parado_baixo
parado = true
}

if keyboard_check_released (ord("A")) {
sprite_index = spr_player_parado_esquerda
parado = true
}

if keyboard_check_released (ord("D")) {
sprite_index = spr_player_parado_direita
parado = true
}

if parado = true {
vspeed = 0;
hspeed = 0;
andar = false
}

Ficou enorme, mas foi a melhor forma que achei de tudo funcionar

Re: Problemas com animações

Enviado: Ter Dez 25, 2018 9:48 pm
por 186557
Certo eu dei uma olhada no seu codigo e no codigo que eu estou usando e cheguei nesse resultado:

if keyboard_check(vk_right) {
xspeed = 5
sprite_index=spr_player_d1;image_speed=0.4
}
else if keyboard_check(vk_left) {
xspeed = -5
sprite_index=spr_player_e1;image_speed=0.4
}
else xspeed = 0;

if keyboard_check_released(vk_right){
sprite_index=spr_player_d2
}

if keyboard_check_released(vk_left){
sprite_index=spr_player_e2
}


As animações de andar e ficar parado funcionaram, mas ainda to com duvida com as animações de pulo, pois ainda estou vendo como corrigir os erros

Re: Problemas com animações

Enviado: Ter Jan 01, 2019 10:21 pm
por AragaSam
Com o pulo eu não saberia dizer, pois estou estudando mais jogos no estilo zelda por enquanto, mas se conseguir deixa aqui também pra ajudar quem for acessando. Fico feliz em ter ajudado mesmo estando aprendendo agora também.

Re: Problemas com animações

Enviado: Dom Jan 06, 2019 12:40 am
por 186557
Kk tudo bem, demorei um pouco mas consegui resolver, seu codigo ajudou muito. Obrigado!