Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Mataca en Diciembre 17, 2014, 01:14:34 AM

Título: timer
Publicado por: Mataca en Diciembre 17, 2014, 01:14:34 AM
Hola. Busque pero las soluciones que encontre no sirven para el GM que uso yo.
Quiero un timer de 3 minutos por room (regresivo), y que haga las siguientes cosas:
Al aparecer 5 objetos llamados "obj_0" termine de contar. Si el tiempo esta entre 3:00 a 2:00 de 1000 de score. Si el tiempo esta entre 2:00 a 1:00 de 750 score. Si el tiempo esta entre 1:00 a 0:01 de 500 score. Si el tiempo llega a 0:00 se pierde el juego.

Alguno tiene idea de como se puede hacer?
Título: Re:timer
Publicado por: penumbra en Diciembre 17, 2014, 02:28:48 AM
Algo como:
CREATE
[gml]
marca = 0
bonus = 0
alarm[0] = 3*60*room_speed    // 3 minutos[/gml]

STEP
[gml]
if (instance_number(obj_0) >= 5) and (marca < 1)
{
     marca = alarm[0]/room_speed         //Guardar registro de tiempo (basado en la alarma)
     alarm[0] = -1                                 //Detener alarma
     if (marca >= 120)
          bonus = 1000
     if (marca < 120) and (marca > 60)
          bonus = 750

}
[/gml]
ALARMA[0][gml]
game_end()                                     //Terminar juego si alarma llega a 0[/gml]

No lo he probado, puede fallar, le falta una condición para cuando el marcador es de menos de un minuto, pero la idea es esa
Título: Re:timer
Publicado por: Mataca en Diciembre 18, 2014, 01:19:23 AM
pero como haria para ponerlo en la pantalla? La idea es que el jugador vea cuanto tiempo le queda...
Título: Re:timer
Publicado por: penumbra en Diciembre 18, 2014, 02:24:54 AM
usando draw_text() para imprimir el valor de la alarma. Si quieres que el valor de la alarma en lugar de STEPS se muestre en segundos, hay que dividir el valor de la alarma entre room_speed y eso dibujarlo mediante draw_text()
Título: Re:timer
Publicado por: Mataca en Diciembre 21, 2014, 07:23:36 AM
El codigo que me pasaste penumbra funciona perfecto. Modifique el bonus por el score directo. En vez de bonus = X, puse score = score+X.

Cita de: penumbra en Diciembre 18, 2014, 02:24:54 AM
usando draw_text() para imprimir el valor de la alarma. Si quieres que el valor de la alarma en lugar de STEPS se muestre en segundos, hay que dividir el valor de la alarma entre room_speed y eso dibujarlo mediante draw_text()

Cómo sería para dibujarlo en la pantalla? Me lo dices en un idioma avanzado jaja :P

Como sería el comando draw?

desde ya muchas gracias,
saludos
Título: Re:timer
Publicado por: penumbra en Diciembre 21, 2014, 10:53:21 PM
Cita de: Mataca en Diciembre 21, 2014, 07:23:36 AM
Como sería el comando draw?

http://docs.yoyogames.com/source/dadiospice/002_reference/drawing/drawing%20text/draw_text.html (http://docs.yoyogames.com/source/dadiospice/002_reference/drawing/drawing%20text/draw_text.html)
Título: Re:timer
Publicado por: Mataca en Diciembre 23, 2014, 04:43:55 PM
Y cómo tendria que quedar?.
Probe asi:
alarm[0] = alarm[0]/room_speed
draw_text(80,80, +string(alarm[0]));



Pero no me andubo.

Si uso solo:

draw_text(80,80, +string(alarm[0]));

Me lo muestra pero no en Minutos y segundos como quiero jaja :P.
Título: Re:timer
Publicado por: Clamud en Diciembre 23, 2014, 09:06:31 PM
Cita de: Mataca en Diciembre 23, 2014, 04:43:55 PM
alarm[0] = alarm[0]/room_speed
draw_text(80,80, +string(alarm[0]));

Ese código no va a funcionar porque en la primera línea la alarma se reduce muy rápido en cada paso y no se resta de uno en uno, y en la segunda línea no debe ir el signo + si no hay otra variable antes.

Para dibujar el tiempo usa un código como éste:
[gml]
ts = alarm[0] / room_speed; //total de segundos
m = ts div 60; //minutos
s = ts mod 60; //segundos
draw_text( x,y, string(m)+" : "+string(s) );
[/gml]
Título: Re:timer
Publicado por: Mataca en Diciembre 24, 2014, 05:39:49 AM
Cita de: Clamud en Diciembre 23, 2014, 09:06:31 PM
Cita de: Mataca en Diciembre 23, 2014, 04:43:55 PM
alarm[0] = alarm[0]/room_speed
draw_text(80,80, +string(alarm[0]));

Ese código no va a funcionar porque en la primera línea la alarma se reduce muy rápido en cada paso y no se resta de uno en uno, y en la segunda línea no debe ir el signo + si no hay otra variable antes.

Para dibujar el tiempo usa un código como éste:
[gml]
ts = alarm[0] / room_speed; //total de segundos
m = ts div 60; //minutos
s = ts mod 60; //segundos
draw_text( x,y, string(m)+" : "+string(s) );
[/gml]

Va tomando forma el timer ... jaja.

El tema es que me aparecen los milisegundos tambien. 2:59.99. Aparte cada segundo que pasa desaparece todo y aparece de nuevo, parece que pestañea en cada segundo y distrae montones en el room.
Título: Re:timer
Publicado por: Clamud en Diciembre 24, 2014, 05:29:36 PM
Para no mostrar los decimales tienes varias opciones: puedes usar el operador div o alguna de las siguientes funciones; round, floor y ceil. Lee el manual y experimenta para que determines qué función te conviene. Sobre el parpadeo, no se qué pueda ocasionarlo, tal vez hay otro código por ahí que está afectando.