Luxazx escreveu: ↑Sáb Abr 16, 2022 5:44 pm
Oi cara eu coloquei o código do jeito que tá ai, mas a animação rola toda hora sem parar
Hum.
Se a animação da mesma sprite está se repetindo sem parar, é pq ela não está sendo alterada. Não esqueça de alterar a sprite juntamente ao status:
Código: Selecionar todos
NO STEP
...
switch( status ){
case "socando":
v_sprite = spr_socando;
if( v_img > [quantidade máxima frames] ){ status= "parado"; v_img = 0; }
break;
case "parado":
v_sprite = spr_parado;
[aqui vc pode fazer o controle de ciclo dele parado]
[aqui vc pode colocar alguma lógica de piscada ou outra ação dele parado]
break;
case "andando":
v_sprite = spr_andando;
[aqui vc pode fazer o controle de ciclo da marcha]
break;
etc...
}
// e corrigindo meu erro lá no DRAW:
draw_sprite_ext( v_sprite, v_img, x, y, 1, 1, 0, c_white, 1 )
Detalhe: Se seu soco for de 1 frame só. Aí ao invés de botar timing nos frames vc cria um tempo limite do soco. Vc pode criar uma variável soco_timing ou qualquer coisa.
Código: Selecionar todos
NO CREATE
soco_timing = 1; // nesse valor, o soco vai durar 5 steps se a velocidade de v_img for 0.2 (1 divido por 0.2)
NO STEP
...
switch( status ){
case "socando":
v_sprite = spr_socando;
if( v_img >= soco_timing ){ [igual código acima] }
break;
etc, etc...
}
Uma coisa q não coloquei na resposta passada é q se você quiser q nada possa ser alterado enquanto a animação do soco tá rolando, vc vai ter que colocar uma "trava" nas IFs q mandam o personagem fazer alguma coisa...
Código: Selecionar todos
NO CREATE
break = false; // essa variável vai ser a trava
NO STEP
break = false; // eu estou repetindo isso aqui para não precisar destravar as ações
// em cada CASE abaixo. Colocando aqui eu uso uma linha só.
switch( status ){
case "socando":
break = true;
...
break;
}
if( !break ){
[aqui vc coloca as IFs de ação ou qualquer coisa q não quer q aconteça durante o soco]
}
Dessa forma, enquanto o soco estiver rolando, se vc apertar o botão para andar ou pular, o personagem continua dando o soco sem problemas. Você pode usar o
break = true em outros estados que não podem acontecer interrupções.
Informação extra:
Eu gosto de alterar o conteúdo da variável v_sprite em uma linha só quando o projeto permite:
Código: Selecionar todos
NO STEP
v_sprite = asset_get_index( "spr_personagem_" + status );
Aí eu nomeio as sprites assim:
spr_personagem_socando
spr_personagem_parado
spr_personagem_andando
...
Aí ao invés de trocar as sprites dentro do
switch, eu faço em uma linha só fora dele. Esse é só um toque caso queira otimizar o código acima.
Pode pegar o script acima e reinterpretar segundos suas necessidades...
Espero q tudo tenha ficado claro. Boa sorte ae.