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. |
Problemas com animações
Problemas com animações
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}
}
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
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).
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).
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
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx
Re: Problemas com animações
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)
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
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
///////////
// 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
42
Re: Problemas com animações
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
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
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.
42
Re: Problemas com animações
Kk tudo bem, demorei um pouco mas consegui resolver, seu codigo ajudou muito. Obrigado!
Quem está online
Usuários navegando neste fórum: Semrush [Bot] e 1 visitante