Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: djboro88 en Agosto 17, 2015, 06:23:42 PM

Título: [SOLUCIONADO] Saber que se ha colisionado
Publicado por: djboro88 en Agosto 17, 2015, 06:23:42 PM
Hola GAMEMAKE@S !!

Me gustaría saber como se puede conseguir que desde un obj_contador compruebe que obj_player ha colisionado con obj_punto.
Todo esto para guardar el numero total de puntos que recoge en el nivel que está jugando, de forma que en el siguiente nivel el contador se reinicialice a 0.

¿Alguna idea?
Título: Re:Saber que se ha colisionado
Publicado por: penumbra en Agosto 17, 2015, 07:57:23 PM
No es muy común que un objeto verifique una colisión "ajena". Se puede hacer, pero se requiere más código y para lo que quieres hacer, no es neecsario.  La gran mayoria de las veces es más fácil y conveniente usar una variable

Suponiendo que cada colisión con un objeto punto sólo cuenta una vez (la primera vez que se hace colisión con cada uno de ellos)

CREATE obj_contador
[gml]
puntos = 0[/gml]
CREATE obj_punto
[gml]activo = true[/gml]
EVENTO COLISION obj_punto vs obj_player
[gml]
if (activo)
{
     obj_contador.puntos += 1
     activo = false
}
[/gml]
ROOM_START() del obj_contador
[gml]
puntos = 0
[/gml]
En lugar de una variable activo se podría optar por destruír la instancia del objeto puntos después de haber actualizado el contador, pero no sé si esto se pueda hacer en tu juego o quieras conservar las instancias del objeto puntos
Título: Re:Saber que se ha colisionado
Publicado por: djboro88 en Agosto 17, 2015, 11:38:20 PM
OK. Perfecto. Gracias !!  ;D
Título: Re:Saber que se ha colisionado
Publicado por: Guacusio en Agosto 18, 2015, 12:59:27 AM
Cita de: penumbra en Agosto 17, 2015, 07:57:23 PM
No es muy común que un objeto verifique una colisión "ajena". Se puede hacer, pero se requiere más código y para lo que quieres hacer, no es neecsario.  La gran mayoria de las veces es más fácil y conveniente usar una variable

Suponiendo que cada colisión con un objeto punto sólo cuenta una vez (la primera vez que se hace colisión con cada uno de ellos)

CREATE obj_contador
[gml]
puntos = 0[/gml]
CREATE obj_punto
[gml]activo = true[/gml]
EVENTO COLISION obj_punto vs obj_player
[gml]
if (activo)
{
     obj_contador.puntos += 1
     activo = false
}
[/gml]
ROOM_START() del obj_contador
[gml]
puntos = 0
[/gml]
En lugar de una variable activo se podría optar por destruír la instancia del objeto puntos después de haber actualizado el contador, pero no sé si esto se pueda hacer en tu juego o quieras conservar las instancias del objeto puntos

Tengo una duda de tu código, penumbra: ¿por qué inicializas la variable puntos en el evento create y también en el evento room start del objeto obj_contador?
Título: Re:[SOLUCIONADO] Saber que se ha colisionado
Publicado por: penumbra en Agosto 18, 2015, 01:30:57 AM
Lo que pasa fue que olvidé que al siguiente nivel se tenía que limpiar la variable, entonces agregué el código de ROOM START después y no borré el código de CREATE.