Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Naitsabes0 en Abril 25, 2017, 12:17:42 AM

Título: ¿como hacer un temporizador?
Publicado por: Naitsabes0 en Abril 25, 2017, 12:17:42 AM
Tengo la siguiente estructura gracias a Silver_light, no se si sera la forma correcta, pero funciona, lo malo es que uno no sabe cuanto tiempo falta para que llegue a 0, creía que saldría una especie de contador  ???, pero creo que eso debe formar parte de algún draw_GUI, algo así como cuando le dicen al jugador queda x minutos x segundos para tal cosa, al parecer tendré que agregar algún elemento para que eso funcione ¿que modificación debería ponerle a este código para que pueda ver cuantos minutos y segundos me quedan?.
CREATE:
///Tiempo inicial
tiempo = 5*30;
alarm[0] = 1;

ALARMA 0
///Contador de segundos
tiempo = tiempo -1;
alarm[0] = room_speed;

STEP:
///Tiempo actual
if (tiempo > 0) {
    tiempo = tiempo -1
    alarm[0] = room_speed
}else // tiempo es 0
game_end()
Título: Re:¿como hacer un temporizador?
Publicado por: Silver_light en Abril 25, 2017, 01:41:52 AM
Un método sencillo que puedes utilizar es descontar una variable a través de una alarma.

Es decir, declaras en el evento create una variable, pongamosle que la quieras llamar "tiempo".
[GML]
tiempo = 100 [/GML]
Entonces tienes 100 segundos para hacer algo, o esperar a que se acaben.
Luego, para que se vaya descontanto deberían iniciar una alarma, que haga el trabajo de ir descontandola. Para ello es necesario que hagas una llamada a cualquier alarma, en este caso usariamos alarm[0] pero puede ser cualquiera que te acomode mejor.
[GML]
tiempo = 100
alarm[0] = 1 [/GML]
Ya con eso pondrías a andar el evento "alarm[0]=1" el cual debiera ejecutar un código para ir restando la variable tiempo.
Entonces creas el evento alarm[0] dentro del mismo objeto y colocas:
[GML]
tiempo = tiempo -1 [/GML]
Con eso te aseguras de que en algun momento se haga 0.

Ahora, para que se repita la alarma, es decir, para que se vuelva a descontar el temporizador , es necesario hacer otra llamada a la alarma. Creamos entonces un bucle dentro de la alarma para que se repita una y otra vez, haciendo la llamada con alarm[0] = room_speed, lo que haría que cada segundo se vuelva a ejecutar. Por consecuente se restará 1 al temporizador y volverá a llamar a la alarma.
[GML]
tiempo  = tiempo -1
alarm[0] = room_speed [/GML]

Finalmente solo debes colocar la condición necesaria para que cuando llegue a cero ocurra algo.
[GML]
if (tiempo > 0){
       tiempo  = tiempo -1
       alarm[0] = room_speed
}else // tiempo es 0
game_end() [/GML]

En este caso, cuando la alarma llegue a cero, se termina el juego, pero puedes siempre cambiarlo por otra cosa.

saludos!
Título: Re:¿como hacer un temporizador?
Publicado por: Naitsabes0 en Abril 25, 2017, 03:40:26 AM
Cita de: Silver_light en Abril 25, 2017, 01:41:52 AM
Un método sencillo que puedes utilizar es descontar una variable a través de una alarma.

Es decir, declaras en el evento create una variable, pongamosle que la quieras llamar "tiempo".
[GML]
tiempo = 100 [/GML]
Entonces tienes 100 segundos para hacer algo, o esperar a que se acaben.
Luego, para que se vaya descontanto deberían iniciar una alarma, que haga el trabajo de ir descontandola. Para ello es necesario que hagas una llamada a cualquier alarma, en este caso usariamos alarm[0] pero puede ser cualquiera que te acomode mejor.
[GML]
tiempo = 100
alarm[0] = 1 [/GML]
Ya con eso pondrías a andar el evento "alarm[0]=1" el cual debiera ejecutar un código para ir restando la variable tiempo.
Entonces creas el evento alarm[0] dentro del mismo objeto y colocas:
[GML]
tiempo = tiempo -1 [/GML]
Con eso te aseguras de que en algun momento se haga 0.

Ahora, para que se repita la alarma, es decir, para que se vuelva a descontar el temporizador , es necesario hacer otra llamada a la alarma. Creamos entonces un bucle dentro de la alarma para que se repita una y otra vez, haciendo la llamada con alarm[0] = room_speed, lo que haría que cada segundo se vuelva a ejecutar. Por consecuente se restará 1 al temporizador y volverá a llamar a la alarma.
[GML]
tiempo  = tiempo -1
alarm[0] = room_speed [/GML]

Finalmente solo debes colocar la condición necesaria para que cuando llegue a cero ocurra algo.
[GML]
if (tiempo > 0){
       tiempo  = tiempo -1
       alarm[0] = room_speed
}else // tiempo es 0
game_end() [/GML]

En este caso, cuando la alarma llegue a cero, se termina el juego, pero puedes siempre cambiarlo por otra cosa.

saludos!
Gracias, la estructura quedo así, no se si sera la forma correcta, pero funciona, lo malo es que uno no sabe cuanto tiempo falta para que llegue a 0, creía que saldría una especie de contador  ???, pero creo que eso debe formar parte de algún draw_GUI, algo así como cuando le dicen al jugador queda x minutos x segundos para tal cosa, al parecer tendré que agregar algún elemento para que eso funcione ¿que modificación debería ponerle a este código?.
CREATE:
///Tiempo inicial
tiempo = 5*30;
alarm[0] = 1;

ALARMA 0
///Contador de segundos
tiempo = tiempo -1;
alarm[0] = room_speed;

STEP:
///Tiempo actual
if (tiempo > 0) {
    tiempo = tiempo -1
    alarm[0] = room_speed
}else // tiempo es 0
game_end()
Título: Re:¿como hacer un temporizador?
Publicado por: Parzival en Abril 25, 2017, 03:44:19 AM
Para dibujarlo en pantalla? O para ponerle minutos y segundos?

Para ponerlo en pantalla tenés que usar la funcion draw_text() dentro de algun evento draw.
Por lo general ahora, esta de moda entre los jovenes, usar draw GUI event. Para no tener que estar usando views.

En ese caso:

draw_text( 0, 0, tiempo);

ahora si querés algo con minutos o segundos el chiste es mejor, decinos asi nos reimos todos.
Título: Re:¿como hacer un temporizador?
Publicado por: Naitsabes0 en Abril 25, 2017, 03:49:14 AM
Cita de: Parzival en Abril 25, 2017, 03:44:19 AM
Para dibujarlo en pantalla? O para ponerle minutos y segundos?

Para ponerlo en pantalla tenés que usar la funcion draw_text() dentro de algun evento draw.
Por lo general ahora, esta de moda entre los jovenes, usar draw GUI event. Para no tener que estar usando views.

En ese caso:

draw_text( 0, 0, tiempo);

ahora si querés algo con minutos o segundos el chiste es mejor, decinos asi nos reimos todos.
Ya coloque los detalles de como esta armado el código y lo que busco, es el clásico temporizador de minutos y segundos que sigue al jugador hasta que acabe el nivel (room) ¿ es idea mía o he visto mucha gente que usa portadas de NEKO? saludos.
Título: Re:¿como hacer un temporizador?
Publicado por: Parzival en Abril 25, 2017, 03:58:55 AM
A mi me copiaron, yo soy el original (?)


Bueno, si querés meterle segundos y minutos es facil, es el mismo metodo pero tenés que usar una variable adicional. Como a mi se me ocurre sería declarar una variable para minutos y otra para los segundos:

[GML]
CREATE:
minutos = 2;
segundos = 45;

alarm[0] = 1;
[/GML]
[GML]
ALARMA 0
///Contador de segundos

if (segundos == 0){
    minutos -= 1;
    segundos = 60;
}

segundos -= 1;

alarm[0] = room_speed;


if (minutos == 0) && (segundos == 0) {
      game_end()

[/GML]


una aclaración, es que nunca tenés que poner las llamadas de alarm en el evento step, o sino se llama todo el tiempo y da el efecto de que no se ejecuta. Pero en realidad está todo el rato inicializandose.

ah, para poner el mensaje cambias las instrucciones del draw:

draw_text( 0, 0, "Te quedan " + string(minutos) + "con " + string(segundos));