GM_PC_Jogos
Novato
Novato
Autor
Mensagens: 15
Registrado em: Ter Jul 09, 2019 2:12 pm
Karma: 27

Animação não funciona como deveria.

Ter Jul 16, 2019 11:02 am

Bom dia para todos.
Sobre um jogo de nave(horizontal) que estou criando, estou com um problema na animação do sprite de uma nave inimiga. Vou tentar explicar o código:

Foram criados 3 sprites: cima e baixo (com 12 frames cada, mostrando a nave inclinando), um sprite centro(com apenas 2 frames, para mostrar a animação da turbina) e um objeto (obj_nave_inimiga) definido com o sprite (centro).
Criei também um path: (esse caminho é como se fosse um (S deitado)...A nave quando é criada, ela vem na direção do "player" (subindo e descendo).

Problema:
Eu gostaria que quando a nave subir(trocasse para sprite cima começando do index 0) e quando descer(trocasse para sprite baixo começando do index 0) fazendo toda animação. No momento que a nave está subindo ou descendo, ao completar toda animação, queria que a animação continuasse a partir de certo ponto apenas depois, (mostrando que a nave está inclinada) e começando a animação do index 0, apenas se trocar de direção. Não sei se deu para entender.

O que estou tentando:
No (obj_nave_inimiga) no evento create, criei uma variável: pos = y  // assim que o objeto é criado, salva a posição y nela.

No evento step:
dir = 0; // vai indicar a direção que a nave está, assim trocando a animação

if (y < pos){ // si y for menor que pos(posição atual)
pos = y; // salva a posição y em pos
dir = -1; // serve para indicar a posição que a nave está indo (-1 = subindo, 1 = descendo e 0 está no centro)

}
else if (y > pos){
pos = y;
dir = 1;

}
else{
pos = y;
dir = 0

}

if(dir < 0){                                                          //si for menor que 0
sprite_index = spr_nave_inimiga_cima;     //troca o sprite
if(image_index > 10){                                 //si a animação for maior que o index 10
image_index = 8;                               //vai para index 8 (da animação)
}  
}
else if(dir > 0){                                                 //si for maior que 0
sprite_index = spr_nave_inimiga_baixo;   //troca o sprite
if(image_index > 10){                                //si a animação for maior que o index 10
image_index = 8;                               //vai para index 8 (da animação)
}
}
else{
sprite_index = spr_fase_1_nave_1_centro; // nenhum dos dois, troca para srite centro
}

O que está acontecendo: A nave troca de animação quando muda de direção, mas fixa no index 8 sempre. Ela não começa do index 0 quando muda a direção.
O que acho estranho é que usei essa mesma lógica para troca de animação do "player" e funciona correto. Não sei o que está havendo.
Quem puder ajudar agradeço.
Obrigado pela atenção de todos.
 
Avatar do usuário
Mega
Programador
Programador
Mensagens: 71
Registrado em: Dom Mai 22, 2016 6:20 pm
Karma: 94

Re: Animação não funciona como deveria.

Ter Jul 16, 2019 3:59 pm

Você definiu image_speed anteriormente ?
 
GM_PC_Jogos
Novato
Novato
Autor
Mensagens: 15
Registrado em: Ter Jul 09, 2019 2:12 pm
Karma: 27

Re: Animação não funciona como deveria.

Ter Jul 16, 2019 4:29 pm

Sim... eu tentei isso anteriormente e não funcionou.
image_speed = 1; por exemplo

Tentei inclusive a troca para outro sprite, mas continua na mesma.
 
Avatar do usuário
Mega
Programador
Programador
Mensagens: 71
Registrado em: Dom Mai 22, 2016 6:20 pm
Karma: 94

Re: Animação não funciona como deveria.

Ter Jul 16, 2019 4:37 pm

Tente
if(dir < 0){                   
if sprite_index != spr_nave_inimiga_cima {
sprite_index = spr_nave_inimiga_cima;
image_index = 0;
}                                      
if(image_index > image_number){                                
image_index = 8;                            
}  
}
else if(dir > 0){                                                          
if sprite_index != spr_nave_inimiga_baixo {
sprite_index = spr_nave_inimiga_baixo;
image_index = 0;
}                                      
if(image_index > image_number){                                
image_index = 8;                            
}
}
else{
sprite_index = spr_fase_1_nave_1_centro; // nenhum dos dois, troca para srite centro
}
1
 
GM_PC_Jogos
Novato
Novato
Autor
Mensagens: 15
Registrado em: Ter Jul 09, 2019 2:12 pm
Karma: 27

Re: Animação não funciona como deveria.

Ter Jul 16, 2019 5:11 pm

Obrigado Mega pela ajuda....
Com o seu código ficou bem melhor....acho que preciso de alguns ajustes apenas...
Só não entendi o image_number....(o image_number verifica quantas imagens tem no sprite, é isso?)
Troquei o image_number por 10 e funcionou....com o image_number não estava dando certo...
1
 
Avatar do usuário
Mega
Programador
Programador
Mensagens: 71
Registrado em: Dom Mai 22, 2016 6:20 pm
Karma: 94

Re: Animação não funciona como deveria.

Ter Jul 16, 2019 5:17 pm

Sim image_number verifica a quantidade de frames da sprite atual.
Na vdd acho que não funcionou pq ele retorna a quantidade de frames mas o image_index começa a contar a partir do zero,faltou ler a documentação  :roll:
Então o certo seria
if image_index > image_number-1{
image_index = 8
}
1
 
GM_PC_Jogos
Novato
Novato
Autor
Mensagens: 15
Registrado em: Ter Jul 09, 2019 2:12 pm
Karma: 27

Re: Animação não funciona como deveria.

Ter Jul 16, 2019 5:23 pm

Isso mesmo....O image_number deve contar a partir do 0 também...
Funcionou bem agora com o image_number - 1.
Vlw pela força Mega....

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes