Hola comunidad! otra vez yo xD
quiero saber cómo reiniciar un room desde un menú de pausa,
ejemplo entro al menú de pausa con la barra espaciadora y ahí tengo un botón, quiero que al darle click al botón me vuelva a empezar el room que estaba jugando,
ya tengo un botón donde doy click y me continua desde donde quedo el juego (pues el típico botón de continuar) pero lo que quiero que haga el otro botón es que me reinicie el room no el juego, el menú de pausa es otro room,
gracias de antemano :)
hice lo de la primera respuesta pero me salta este error:
FATAL ERROR in
action number 1
of Mouse Event for Left Button
for object boton_rest:
Push :: Execution Error - Variable Get -1.hab_anterior(100000, -2147483648)
at gml_Object_boton_rest_LeftButtonDown_1 (line 1) - room_goto(hab_anterior)
no se que hago mal :(
Gracias, el último ejemplo me sirvió :)
Si el menú de pausa es otra habitación, entonces forzosamente tendrás que usar la función room_goto() para ir al room deseado y tendrías que usar una variable para almacenar cuál fue la habitación anterior a la de pausa
ROOM END
[gml]
if (room != room_pausa) //cambiar room_pausa por el nombre de la habitación de pausa
hab_anterior=room;
[/gml]
Luego, en el botón de carga de room del menú de pausa, evento MOUSE LEFT PRESSED
[gml]room_goto(hab_anterior)[/gml]
Para que el código funcione, las habitaciones no deberán ser persistentes, porque de ser así, la habitación a la que regreses no reiniciará, sino que continuará desde donde la dejaste. Esto también quiere decir que los objetos que haya al comenzar la habitación no deberían ser persistentes (esto quizás no aplique para algún objeto controlador, pero depende de qué haga ese controlador) para que su evento CREATE pueda ejecutarse de nuevo. En caso de haber objetos persistentes en la habitación a reiniciar, nunca me he enfrentado a este escenario, pero creo que tendrías que forzar a que se ejecutara su evento CREATE desde el evento ROOM_RESTART de algún objeto controlador mediante la función event_perform_object().
Cita de: penumbra en Agosto 10, 2015, 07:39:51 AM
Si el menú de pausa es otra habitación, entonces forzosamente tendrás que usar la función room_goto() para ir al room deseado y tendrías que usar una variable para almacenar cuál fue la habitación anterior a la de pausa
ROOM END
[gml]
if (room != room_pausa) //cambiar room_pausa por el nombre de la habitación de pausa
hab_anterior=room;
[/gml]
Luego, en el botón de carga de room del menú de pausa, evento MOUSE LEFT PRESSED
[gml]room_goto(hab_anterior)[/gml]
Para que el código funcione, las habitaciones no deberán ser persistentes, porque de ser así, la habitación a la que regreses no reiniciará, sino que continuará desde donde la dejaste. Esto también quiere decir que los objetos que haya al comenzar la habitación no deberían ser persistentes (esto quizás no aplique para algún objeto controlador, pero depende de qué haga ese controlador) para que su evento CREATE pueda ejecutarse de nuevo. En caso de haber objetos persistentes en la habitación a reiniciar, nunca me he enfrentado a este escenario, pero creo que tendrías que forzar a que se ejecutara su evento CREATE desde el evento ROOM_RESTART de algún objeto controlador mediante la función event_perform_object().
intenté pero aún así me dio un FATAL ERROR al intentar obtener la variable hab_anterior, en donde debo poner el evento ROOM END?? lo puse en un objeto no visible que es para acceder a menús y al room pausa, y luego en el boton hice lo que dijiste pero aún no lo eh logrado :( no se que estoy haciendo mal
Cuando te salga un error, procura poner todo el mensaje, para saber exactamente que pasa.
El evento ROOM END Está bien si lo colocas en ese objeto no visible. Si la variable hab_anterior la has declrado dentro del objeto invisible, entnces en el botón debes usar el método de punto para acceder a esa variable desde otro objeto, probablemente esta sea la causa del error. El código debería entonces ser
[gml]
room_goto(obj_invisible.hab_anterior) //cambiar el nombre obj_invisible por el nombre correcto, según tu objeto.
[/gml]
Otra alternativa, en lugar de usar obj_invisible.hab_anterior es declarar hab_anterior como variable global en CREATE del objeto invisible, y así no habría necesidad de usar el método de punto dentro del botón (quedaría como en el mensaje anterior).
Hola acabo de hacer un código en Game Maker Studio para que lo veas.
Hice tres room, una para la pausa llamada "sala_pausa" y otras dos llamadas "sala_1" y "sala_2"
La sala_1 y la sala_2 tienen ambos un objeto, mas concretamente una pelota.
El de la sala_1 es de color rojo y al iniciar el room aparece en la esquina superior izquierda del mismo. El de la sala_2 es de color amarillo y aparece en su esquina inferior derecha.
También los fondos de los rooms son distintos para diferenciarlos.
Estas dos salas están marcadas como "persistente" que creo que así debes tener tus rooms.
La idea es que puedes cambiar la posición de las pelotas con el mouse para dejar la sala en un estado, probar la pausa y cuando elijas la opcion que quieras (continuar o reiniciar) veas los resultados. El de continuar debería llevarte a la sala que habías abandonado y con la pelota en el mismo lugar y reiniciar debería aparecer en esa sala pero con la pelota en la posición inicial. Funciona, puedes ver el código e implementarlo en el tuyo.
El juego tiene las instrucciones de como pasarse de sala en sala, poner el juego en pausa y demás opciones.
Tengo un objeto "controlador" que es persistente que es el que tiene todo el código.