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.

Como definir tempo de texto na tela?

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Higor Melo
Membro
Membro
Reações: 0
Mensagens: 42
Localização: SP

Como definir tempo de texto na tela?

Mensagem por Higor Melo » Qua Dez 28, 2016 7:50 pm

O Player bate na caixa até o HP dela chegar a 0. No evento draw, inseri o código:

if HP=0
{
draw_set_color(c_dkgray)
draw_set_alpha(0.3)
draw_rectangle(x-75,y-55,x+75,y-5,0)
draw_set_color(c_blue)
draw_rectangle(x-75,y-55,x+75,y-5,1)
draw_set_color(c_white)
draw_set_halign(fa_left)
draw_set_alpha(1)
draw_text(x-75,y-50,'CAIXA QUEBRADA..')
}

O código funciona, mas o texto some muito rápido.

Avatar do usuário
Rodrigo Santiago
Colaborador
Colaborador
Reações: 0
Mensagens: 273

Re: Como definir tempo de texto na tela?

Mensagem por Rodrigo Santiago » Qua Dez 28, 2016 8:48 pm

O problema não está nesse código e sim  no tempo em que a condição de "HP = 0" e verdadeira. Por acaso você destrói o objeto quando o hp é zero ?

Avatar do usuário
Led
Membro
Membro
Reações: 0
Mensagens: 51

Re: Como definir tempo de texto na tela?

Mensagem por Led » Qua Dez 28, 2016 8:59 pm

Provavelmente na hora de reduzir o HP você não está verificando se o HP é maior que 0. Dessa forma, o HP atinge valores menores que 0 e a condição não é mais verdadeira.
Se for o caso, basta checar se o HP é maior que 0 antes de reduzi-lo.
Se quiser que o texto fique na tela por X segundos e depois suma, basta criar uma variável para isso.

No Create:

Código: Selecionar todos

drawingText = false;
No código responsável por reduzir o HP:

Código: Selecionar todos

if (HP>0)
{
HP--;
}
else if (drawingText == false)
{
drawingText = true;
alarm[0] = X * room_speed //Trocar o X pelo valor desejado em segundos;
}
No alarm[0]:

Código: Selecionar todos

drawingText = false;
No draw:

Código: Selecionar todos

if drawingText
{
draw_set_color(c_dkgray)
draw_set_alpha(0.3)
draw_rectangle(x-75,y-55,x+75,y-5,0)
draw_set_color(c_blue)
draw_rectangle(x-75,y-55,x+75,y-5,1)
draw_set_color(c_white)
draw_set_halign(fa_left)
draw_set_alpha(1)
draw_text(x-75,y-50,'CAIXA QUEBRADA..')
}
Note que dessa forma o texto voltará a aparecer se o evento responsável pela redução de HP for acionado.

Avatar do usuário
Higor Melo
Membro
Membro
Reações: 0
Mensagens: 42
Localização: SP

Re: Como definir tempo de texto na tela?

Mensagem por Higor Melo » Qua Dez 28, 2016 9:22 pm

Rodrigo Santiago escreveu:O problema não está nesse código e sim  no tempo em que a condição de "HP = 0" e verdadeira. Por acaso você destrói o objeto quando o hp é zero ?
Sim, quando o HP chega no zero, o objeto caixa "destrói". Nesse momento a mensagem é mostrada.

Avatar do usuário
Dust
Membro
Membro
Reações: 0
Mensagens: 109
Localização: Santa Catarina

Re: Como definir tempo de texto na tela?

Mensagem por Dust » Qui Dez 29, 2016 11:34 am

Bem, acontece que o texto está sendo executado pelo objeto caixa, porém este código só é executado enquanto o HP for igual a 0 e também se o objeto existir, só que no caso você está apagando o objeto no momento em que a mensagem é executada e por isso que ela some rápido.
Procure um outro jeito de exibir a mensagem, com um objeto controle, use algo do tipo:
If objeto_caixa.hp=0 {draw_text}.
Flw!
Edit::: Para determinar um tempo para a mensagem ser executada e depois aparecer use uma variável como por exemplo show_text=true, ative e desative usando alarmes ou coisa do tipo.

Avatar do usuário
Lima Loucão
Novato
Novato
Reações: 0
Mensagens: 16

Re: Como definir tempo de texto na tela?

Mensagem por Lima Loucão » Qui Dez 29, 2016 1:10 pm

Conseguiu resolver?
Se não, eu sempre que preciso que um texto apareça na tela estilo hits de RPG's, eu crio um único objeto(obj_text). Neste objeto eu crio as variaveis: font, color, text, time
Onde:

Código: Selecionar todos

///CREATE
font = ""; //Fonte desejada
color = ""; //Cor desejada
text = ""; //Texto desejado
time = 0; //Tempo em segundos para sumir
alarm[0] = time*room_speed; //Dá inicio ao tempo
vspeed=-1 //Da a impressão que o texto está subindo
Crio o script abaixo (scr_callText):

Código: Selecionar todos

///scr_callText(var,objeto,fonte,cor,mensagem,tempo_em_seg,posx,posy)
argument0 = instance_create(argument6,argument7,argument1);
argument0.font = argument2; //Qual é a fonte que vai usar
argument0.color = argument3; //Qual é a cor
argument0.text = argument4; //Qual é o texto
argument0.time = argument5; //Qual é o tempo
Então chamo o script sempre que eu quiser que o texto apareça:

Código: Selecionar todos

if HP<=0
{
scr_callText(texto,obj_texto,fnt_mensagem,c_yellow,"CAIXA QUEBRADA",5,x-75,y-50)
instance_destroy(); //Se destrói para não criar muitos textos.
}
Voltando ao obj_texto:
No alarm[0] coloque:

Código: Selecionar todos

instance_destroy();
E no DRAW coloque:

Código: Selecionar todos

draw_set_font(font)
draw_set_color(color)
draw_text(x,y,text)
Pronto, isso deve funcionar para todos os objetos que você quer chamar um texto. Pode ser um hit dado:

Código: Selecionar todos

scr_callText(hitnegativo,obj_texto,fnt_hit,c_red,"-"+string(hit),2,x,y)
Ou um aviso:

Código: Selecionar todos

scr_callText(msg,obj_texto,fnt_alert,c_white,"Esta porta está trancada!",1,x,y)

Responder

Quem está online

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