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. |
Animação não funciona como deveria.
- GM_PC_Jogos
- Novato
- Reações: 0
- Mensagens: 15
Animação não funciona como deveria.
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.
- ValdeciVieira
- Moderador
- Reações: 8
- Mensagens: 122
- Localização: Rio de Janeiro, Brasil
- GM_PC_Jogos
- Novato
- Reações: 0
- Mensagens: 15
Re: Animação não funciona como deveria.
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.
image_speed = 1; por exemplo
Tentei inclusive a troca para outro sprite, mas continua na mesma.
- ValdeciVieira
- Moderador
- Reações: 8
- Mensagens: 122
- Localização: Rio de Janeiro, Brasil
Re: Animação não funciona como deveria.
Tente
Código: Selecionar todos
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
}
- GM_PC_Jogos
- Novato
- Reações: 0
- Mensagens: 15
Re: Animação não funciona como deveria.
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...
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...
- ValdeciVieira
- Moderador
- Reações: 8
- Mensagens: 122
- Localização: Rio de Janeiro, Brasil
Re: Animação não funciona como deveria.
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
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
Código: Selecionar todos
if image_index > image_number-1{
image_index = 8
}
- GM_PC_Jogos
- Novato
- Reações: 0
- Mensagens: 15
Re: Animação não funciona como deveria.
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....
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 2 visitantes