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.

Sprite de soco Tópico resolvido

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Luxazx
Membro
Membro
Reações: 0
Mensagens: 21

Sprite de soco

Mensagem por Luxazx » Dom Abr 10, 2022 2:58 pm

Eu estou com um problema com a Sprite de soco do meu personagem, ela não é mostrada inteira é muito rápida.(parece que fica piscando)

O código

Código: Selecionar todos

    
    var (atacar) =keyboard_check_pressed(ord("P"))

		if (atacar) 
			{
				sprite_index= Soco1;
				image_index = 0;
				image_speed = 5;
				Speed = 0;
			
			}
    

Avatar do usuário
Mysterious Stranger
Artista
Artista
Reações: 0
Mensagens: 62
Localização: BH

Contato:

Re: Sprite de soco

Mensagem por Mysterious Stranger » Sáb Abr 16, 2022 1:51 pm

Vc poderia talvez controlar a velocidade da ação com uma variável...

Código: Selecionar todos

NO CREATE
v_sprite = [ qualquer sprite ]; // variável para controlar qual sprite usar
v_img = 0; // controle de velocidade da sprite
status = "parado"; // status de ação do seu personagem

NO STEP
...
v_img += 0.2; // escolha uma velocidade para os frames da sprite
if( atacar ) { status = "socando"; } // mudar status para socando
switch(  status ){
	...
	case "socando":
		v_sprite = spr_socando;
		if( v_img > [quantidade máxima de frames do sprite] ){
			status = "parado";
			v_img = 0;
		}
	break;
}

NO DRAW
draw_sprite_ext( sprite, img, x, y, 1, 1, 0, c_white, 1 );

Avatar do usuário
Luxazx
Membro
Membro
Reações: 0
Mensagens: 21

Re: Sprite de soco

Mensagem por Luxazx » 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

Avatar do usuário
ValdeciVieira
Moderador
Moderador
Reações: 8
Mensagens: 122
Localização: Rio de Janeiro, Brasil

Re: Sprite de soco

Mensagem por ValdeciVieira » Dom Abr 17, 2022 2:53 pm

Recomendo aprender sobre state machine, procure pelo curso do none, vale muito a pena. :detetive:

Avatar do usuário
Mysterious Stranger
Artista
Artista
Reações: 0
Mensagens: 62
Localização: BH

Contato:

Re: Sprite de soco  Tópico resolvido

Mensagem por Mysterious Stranger » Seg Abr 18, 2022 1:35 pm

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.

Responder

Quem está online

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