Animação não funciona como deveria.
Enviado: 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.
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.