Noticias

¡Ayuda a la Comunidad GM, haz una donación!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Quiero que una Instancia se quede Destruida al reiniciar la Room [Solucionado]  (Leído 1171 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado T789

Hola vengo con una pregunta um poco importante
Estoy elaborando un Pacman, al comer un punto este se destruye y me suma 10 al puntaje, el problema viene que al morir con un fantasma la room se reinicia y los puntos vuelven a aparecer

Como se nota en el pacman original, los puntos quedan siempre comidos, y es un poco molesto porque vuelven a aparecer y el puntaje antes de morir sigue ahi

Asi que como haria para que la instancia que comi se quede destruida al reiniciar la room
« Última modificación: Mayo 19, 2020, 06:10:33 am por T789 »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado BssString

Respuesta #1 en: Diciembre 18, 2019, 05:43:48 pm
Hola T789

En lugar de reiniciar la room, podrías teletransportar el Pacman y los Fantasmas a su posición original usando:
Código: [Seleccionar]
x = xstart
y = ystart

Sólo deberás reiniciar los estados, variables o sprites que les hayas modificado para que de la sensación de que la room se ha reiniciado.

Saludos

 


Desconectado T789

Respuesta #2 en: Diciembre 18, 2019, 05:47:56 pm
Parece buena sugerencia pero el problema es que tendria que volver a reiniciar los sonidos y los estados de los demas objetos y por como los tengo seria un infierno hacer todo ese progreso

Vamos nada es imposible en GM y tampoco quiero nada que ver con el room_persistemt

 


Desconectado Black_Cat

Respuesta #3 en: Diciembre 18, 2019, 06:00:01 pm
edit: disculpa XD flashé que decias los puntos de score.

No, en realidad, si tenes que usar room_persistent para que no vuelvan a aparecer las pastillas,  los puntos.
O hacer lo que dice el amigo. Reiniciar las posiciones x e y de los enemigos y de pacman.

De ahí creo que no hay otra forma. O sería una rebuscada, como : escribir el estado actual de las instancias del nivel en un archivo, reiniciar el nivel y cargar, el estado de las instancias desde donde se dejó. Lo cual, de normal, escribir y leer desde un archivo en disco es mas costoso en tiempo que hacer las opciones anteriores.
« Última modificación: Diciembre 18, 2019, 06:10:49 pm por Black_Cat »


 


Desconectado T789

Respuesta #4 en: Diciembre 18, 2019, 06:17:34 pm
Disculpa si estoy pidiendo mucho pero mostrarias un ejemplo de como harias para hacer todo eso

por el momento estoy algo frustrado como para volver a tocar el codigo

 


Desconectado Black_Cat

Respuesta #5 en: Diciembre 18, 2019, 06:31:15 pm
Lo de guardar en un archivo? hmm ahora no tengo tiempo pero, ya te digo, es trabajoso, y a lo mejor es como programar demasiado para algo sencillo.
Se puede hacer de varias maneras, segun se me ocurre a mi:
1) Una sería usar una matriz [x, y]  o una tabla de doble entrada para guardar las coordenadas de cada pastilla.
2) abrir el archivo txt
3) escribir la lista de valores dentro de la matriz
3) cerrar el archivo
Eso para guardar las pastillas que todavia quedan en la room.

Luego para cargarlas el proceso inverso.
1)limpiar la room de todas las pastillas
2)mover al personaje y los enemigos a sus posiciones
3)abrir el archivo
4)obtener cada valor dentro de la matriz y crear la instancia en esa posicion
   que aclaremos que si la matriz se llamara pastillas, entonces:
   pastillas[0,0] //coordenada x de la primera pastilla
   pastillas[0,1] //coordenada x de la primera pastilla
   pastillas[1,0] //coordenada x de la segunda pastilla
   pastillas[2,1] //coordenada x de la segunda pastilla
etc
5)cerrar el archivo

eso masomenos seria el trabajo que habría que realizar.


 


Desconectado T789

Respuesta #6 en: Diciembre 18, 2019, 06:33:41 pm
bueno ya tengo una idea mas o menos de lo que debo hacer, vere cuanto me tardo en mejorar lo que ya tengo

 


Desconectado Gatete

Respuesta #7 en: Diciembre 19, 2019, 02:51:03 pm
Tambien puedes usar una ds_map para ello

//Comprueba que puntos se han comido.
global.points = ds_map_create()

Pon esto en el create event del punto:
//Si este punto se ha comido en una vida anterior, destruyelo.
if (ds_map_find_value(global.points, id) == 1)
    instance_destroy();

Cuando lo colecciones pon:
//Añade este punto al ds_map
ds_map_add(global.points, id, 1);

Y para reiniciarlo, pon:
//Reinicia el ds_map
ds_map_clear(global.points);

 


Desconectado BssString

Respuesta #8 en: Diciembre 23, 2019, 12:46:01 am
Parece buena sugerencia pero el problema es que tendria que volver a reiniciar los sonidos y los estados de los demas objetos y por como los tengo seria un infierno hacer todo ese progreso

Vamos nada es imposible en GM y tampoco quiero nada que ver con el room_persistemt

Si quieres evitar usar el room persistent y ahorrarte lo de crear un archivo txt externo, puedes intentar re-ejecutar el create event de algunos objetos clave usando:
Código: [Seleccionar]
with obj_player event_perform(ev_create,0)
with obj_enemy event_perform(ev_create,0)
etc
Eso haría al objeto "obj_player" y al objeto "obj_enemy" volver a ejecutar su "create event" aunque no hayan sido realmente creados de nuevo.

Incluso Game Maker permite crear eventos personalizados para tus objetos.
Puedes crear un evento "Other" (esos del diamante verde) llamado "User Defined" y elijes uno de los 12 eventos disponibles.
En ese evento puedes colocar el código que inicia el status de cada objeto y llamarlo con la función:
Código: [Seleccionar]
event_perform(ev_other,ev_user0)En ese evento puedes colocar el código que resetearía el estado de cada objeto a su estado inicial y además colocar el x=xstart/y=ystart
Así puedes efectuar un "falso reset" de la room.

Saludos