Gamemaker - Transicion entre rooms

Yandr0s

A ver si consigo ayuda por aqui porque me estoy desesperando ya xD

Llevo todo el dia dandole vueltas a un problema y todo lo que pruebo no consigo que me funcione xD

Estoy creando un shooter cenital por salas ( rollo binding of isaac ) con fisicas ( que este paso las mando a tomar por culo ) pero la transición entre las salas me esta volviendo loco

Ahora mismo lo que hago es lo siguiente:

Las puertas tienen un collider , que me llaman a un script dando el punto cardinal de la puerta.

Entonces hago un room_goto , a una sala aleatoria de una lista y recoloco el personaje ( persistente) en la posicion correspondiente a la puerta opuesta por donde salio.

En teoria va bien hasta ahi, pero una vez se hace el cambio, se rallan las fisicas y el personaje deja de moverse en linea recta, y hace cosas raras xD

El script es el siguiente ( con un case para cada direccion )

room_goto(choose(room2,room3));

obj_player.phy_rotation=0;

obj_player.phy_fixed_rotation=true;



dir = argument0;


switch(dir)
{
    case "N":
    
obj_player.angle=90; obj_player.x=doorS_x; obj_player.y=doorS_y; show_debug_message("case N"); break;

y en este gif se puede ver mas o menos lo que pasa ( solo estoy moviendo hacia arriba y abajo )

He probado a destruir el personaje y crear una nueva instancia , pero me fallan otros controladores que dependen del obj_player :/

TheGameNick

No entiendo a lo que te refieres a "y recoloco el personaje", yo normalmente cuando tengo un personaje y lo muevo entre salas, lo que hago es crear un archivo temporal que guarde los datos del personaje (armas, vida,etc...) cuando el personaje abandona la sala y cuando entro en otra sala lo que hago es crear otra vez al personaje pero recuperando los datos anteriores.
No si te habrá servido para algo, ya que no entiendo la parte en la que re-colocas a tu personaje.

2 respuestas
Yandr0s

#2 En este caso, el personaje es persistente, y simplemente le cambio la posicion a la correspondiente.

La opcion que me comentas ( que no sea persistente, y simplemente volver a crearlo ) la estoy intentando, pero me peta el juego cuando otros scripts intentan localizar al personaje :/

TheGameNick

Has probado, iniciar el juego desde la room2 o 3?, a ver si funciona correctamente, simplemente para reducir las posibilidades de la causa de este comportamiento.
Te recomiendo visitar la pagina de ComunidadGM, creo que podrán ayudarte mejor.
PD: por casualidad no tendrás esos scrips (o bien relacionados con el movimiento del pjt, o la camara) metidos en "Game Start"?

javifugitivo

creo que el problema es que estás moviendo al personaje con sus variables "no físicas": angle,x e y.

Al cambiarlo de room mejor usa las variables de posición y rotación físicas:

phy_position_x
phy_position_y
phy_rotation

Sigue usando las antiguas también: Para que el cuerpo físico y el sprite estén en el mismo sitio ;-)

Piensa que en gamemaker las físicas no se ven sino está el debug puesto, y lo gráfico es sólo una representación de como se comportan los cuerpos. Si mueves las instances, pero no la parte física de cada instance.. ocurren cosas raras.

1 respuesta
Yandr0s

#5 esa opcion tambien la habia contemplado sin exito xD. El problema viene por la rotacion fisica, que no se mantiene fija y se vuelve loco

De todas formas, al final lo he arreglado con la idea de #2

En lugar de crear la instancia desde el script ( que es lo que no funcionaba ) , lo que hago es guardar los datos en una objeto , y la room crea el player con esos datos.

no se hasta que punto sera lo mas correcto, pero con que funcione me vale xD

Gracias a los dos :D

1
Jastro

Por favor chicos, estuve unos buenos meses dando por culo a la administracion para conseguir la etiqueta code haced el favor de usarla.

gracias ;P

1

Usuarios habituales

  • Jastro
  • Yandr0s
  • javifugitivo
  • TheGameNick