Hola gente, yo de nuevo. La verdad que sigo avanzando con mi juego. Ya llevo 6 meses de desarrollo con la ayuda de todos y cada vez voy aprendiendo nuevas cosas.
Ahora que ya diseñe las 100 rooms de mi juego, es hora de relacionar todo.
Mi problema es que quiero que cuando un personaje por ejemplo en la room1 entre por la puerta "A", quede de algún modo guardada su posición. Para que si estoy en la room 2 y quiero volver a la room 1 por donde vine aparezca justo al lado de la puerta "A".
O que por ejemplo, si estoy en un pueblo y entro a una casa, al salir de la casa mi personaje aparezca al lado de la puerta de la casa.
Lo podría solucionar fácilmente haciendo las rooms persistentes pero quiero tratar de evitar eso a toda costa ya que generaría conflictos por como diseñe mi juego.
Podrias usar 2 variables globales de recuerdo, osease, cuanto toque la puerta, guardas la variable "x", y a "y", del objeto. Asi cuando vuelvas simplemente le dices que se cree en esa posición y listo.
Me as entendido??
Revisa la respuesta de Clamud en este hilo:
http://www.comunidadgm.org/preguntas-y-respuestas/al-pasar-una-puerta-ir-a-una-posicion/ (http://www.comunidadgm.org/preguntas-y-respuestas/al-pasar-una-puerta-ir-a-una-posicion/)
Cita de: penumbra en Febrero 14, 2015, 09:35:04 PM
Revisa la respuesta de Clamud en este hilo:
http://www.comunidadgm.org/preguntas-y-respuestas/al-pasar-una-puerta-ir-a-una-posicion/ (http://www.comunidadgm.org/preguntas-y-respuestas/al-pasar-una-puerta-ir-a-una-posicion/)
Al final me puse hacer varias pruebas y creo que he dado con el problema sin utilizar variables ni room persistente.
Te comento y tu dime que te parece mi idea. De paso quizas a alguien le sirva.
Primero a mi player lo hice persistente, luego, a cada objeto puerta le he puesto como es lógico el código para que me lleva a otra room, pero además se me ocurrió ponerle en el evento END ROOM un jump to posicion aplicable al player, entonces como mi player es persistente, al cambiar de room me lleva a la posición deseada. Lo único malo es que tengo que estar calculando las cordenadas adecuadas para que aparezca en cada puerta pero lo bueno es que lo solucioné. Solo espero no tener algún inconveniente al hacer persistent a mi player.
En juegos en donde el jugador avanza y regresa entre escenarios o pueda transportarse a habitaciones lejanas, lo normal es que el objeto del jugador sea persistente. Usar un jugador no persistente es más adecuado en juegos donde no hay conexión entre habitaciones o juegos donde el jugador ya no puede regresar. Creo que los que leímos el hilo dábamos por hecho que tu jugador era persistente :-[
Si tu jugador no era persistente y cambiaste a persistente, puede que ocurran algunos errores o cosas raras, pero nada que no se pueda solucionar. Y sí, lo normal es usar ROOM START/ROOM END para cambiar la posición del jugador antes de que se dibuje la nueva habitación. O también se puede usar el botón Creation Code del room
Cita de: penumbra en Febrero 14, 2015, 11:10:56 PM
En juegos en donde el jugador avanza y regresa entre escenarios o pueda transportarse a habitaciones lejanas, lo normal es que el objeto del jugador sea persistente. Usar un jugador no persistente es más adecuado en juegos donde no hay conexión entre habitaciones o juegos donde el jugador ya no puede regresar. Creo que los que leímos el hilo dábamos por hecho que tu jugador era persistente :-[
Si tu jugador no era persistente y cambiaste a persistente, puede que ocurran algunos errores o cosas raras, pero nada que no se pueda solucionar. Y sí, lo normal es usar ROOM START/ROOM END para cambiar la posición del jugador antes de que se dibuje la nueva habitación. O también se puede usar el botón Creation Code del room
Hola penumbra, al pricipio dije que lo había solucionado pero haciandolo de la manera que te comente tengo problemas. Hay rooms donde el personaje no aparece es esa posición y otras rooms que si funciona bien. No entiendo cuál es el problema.
Hay algo que me esta dando un problema y un gran dolor de cabeza.
No lo puedo creer. Más de un año trabajando en este juego para que ahora tenga este problema.
Este es el código que tengo para ir a otra room en cierta posición.
En el evento step de la puerta
///codigo para ir a la room...
if place_meeting(x,y,oPlayer) and keyboard_check_pressed(vk_up)
{
alarm[0]=40
}
En el evento alarma[0]
room_goto(room_10)
Ahora, si yo elimino la puerta del editor de room y la vuelvo a colocar funciona bien. EL problema parece que se debe al orden en que se crean las instancias en la room. La verdad me dan ganas de llorar en estos momentos.
En el código que pones nunca se modifica la posición del personaje, si el objeto es persistente conservará sus coordenadas en la room siguiente.
Cita de: Clamud en Febrero 17, 2015, 02:09:20 AM
En el código que pones nunca se modifica la posición del personaje, si el objeto es persistente conservará sus coordenadas en la room siguiente.
Justamente, mi Player es persistente, y al poner jump to position no se supone que se graba la nueva posición del personaje?
Olvidé que la nueva posición se define en el evento Room End. Se me ocurren 2 causas para ese error, la primera es que la nueva posición asignada no es la correcta, y la otra es que en el evento Create se asigne una posición diferente, se puede depurar colocando éstas líneas de código al final de los eventos correspondientes:
[gml]
show_debug_message( "Room End: "+string(x)+" "+string(y) );
[/gml]
[gml]
show_debug_message( "Room Start: "+string(x)+" "+string(y) );
[/gml]
Los mensajes aparecerán en la ventana "CompileForm" (en la parte de abajo de GMS), observa que los valores coinciden y que son los correctos.
Cita de: Clamud en Febrero 17, 2015, 02:50:44 AM
Olvidé que la nueva posición se define en el evento Room End. Se me ocurren 2 causas para ese error, la primera es que la nueva posición asignada no es la correcta, y la otra es que en el evento Create se asigne una posición diferente, se puede depurar colocando éstas líneas de código al final de los eventos correspondientes:
[gml]
show_debug_message( "Room End: "+string(x)+" "+string(y) );
[/gml]
[gml]
show_debug_message( "Room Start: "+string(x)+" "+string(y) );
[/gml]
Los mensajes aparecerán en la ventana "CompileForm" (en la parte de abajo de GMS), observa que los valores coinciden y que son los correctos.
No no son los correctos. Mira, preparé un sencillo ejemplo en formato *.gmz y vas a ver a lo que me refiero.
Apenas no habras ejecutalo, cuando la rana este sobre la primera puerta presiona arriba y vas a ver que te lleva a una posición incorrecta.
Ahora elimina la primera puerta y vuelvela a colocar en el editor de room y vas a ver que funciona.
Como dije, creo que el problema se debe al orden en que se crean las instancias.
Ya lo probé, parece que la solución es aumentar el depth de las puertas para que su evento Room End se ejecute antes que el de la rana. Además recomiendo no crear objetos puerta para cada habitación, mejor crea un sólo objeto puerta y en el editor de rooms asigna un "Creation Code" diferente para cada instancia (click derecho), y las puertas no deben ser persistentes.
También funciona si en el evento "Creation Code" de la habitación room1 defines la posición x e y de la rana
Cita de: penumbra en Febrero 17, 2015, 03:44:15 AM
También funciona si en el evento "Creation Code" de la habitación room1 defines la posición x e y de la rana
Como sería eso? Necesito el método más sencillo de todos porque tengo que enlazar más de 100 roms. Podrías darme un ejemplo?
Abres una habitación, te vas a la pestaña settings y ahí haces click en el botón Creation Code. Se abre un editor de código y ahí colocas la posición inicial de la rana en esa habitación. Lo que dijo Clamud es importante, usar un objeto puerta distinto por cada habitación es muy poco recomendable
Cita de: penumbra en Febrero 17, 2015, 04:18:13 AM
Abres una habitación, te vas a la pestaña settings y ahí haces click en el botón Creation Code. Se abre un editor de código y ahí colocas la posición inicial de la rana en esa habitación. Lo que dijo Clamud es importante, usar un objeto puerta distinto por cada habitación es muy poco recomendable
Lo de la rana lo subí a modo de ejemplo. Lo de utilizar el creation code en la room no me sirve porque en una room puedo tener varias puertas. Distinto sería el caso si utilizara condicional, pero me parece que lo mejor va a ser no hacerlo persistente. a mi player y utilizar variables. Crear un objeto global persistente definiendo las variables. Me voy a hacer un tremendo lío pero no me queda otra.
Igual gracias a todos pos su ayuda. Les agradezco un montón.