Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: pacne en Marzo 02, 2015, 12:17:09 PM

Título: Ayuda personajes meta
Publicado por: pacne en Marzo 02, 2015, 12:17:09 PM
Tengo un juego de dos personajes, los dos personajes es el mismo objeto, se mueven igual ya que son el mismo objeto, y tienen que llegar a la meta los dos objetos, sino no se puede pasar el nivel, alguien me podria decir como hacer esto, con un objeto si que se, he creado una colision y cuando colisiona pasa al siguiente nivel, pero que los dos personajes no se, muchas gracias
Título: Re:Ayuda personajes meta
Publicado por: Clamud en Marzo 02, 2015, 02:39:30 PM
Se me ocurren varias formas de resolver esto:
Las instancias del objeto personaje se podrían destruir al colisionar con el objeto meta, y el objeto meta evaluaría esto en el evento step [gml]if( instance_number(personaje) == 0 ) room_goto_next();[/gml]

Otra opción es que el objeto meta lleve un contador de las veces que colisiona un personaje colisiona con éste, pero presiento
que ésta es la forma más complicada.

También se podría activar una variable en las instancias del objeto personaje al colisionar con la meta, y el objeto meta tendría algo así en su evento Step:
[gml]
global.pasarnivel = true;
with( obPersonaje ) global.pasarnivel = global.pasarnivel and meta; //meta es una variable
if( global.pasarnivel ) room_goto_next();
[/gml]
Título: Re:Ayuda personajes meta
Publicado por: pacne en Marzo 02, 2015, 03:13:01 PM
lo estado intentando pero nada. no se que codigo poner, porque tengo que si colisiona el objeto se va a la siguiente room, pero tienen que concidir los dos objetos en la meta a la vez, hay 2 metas(mismo objeto), uno para cada personaje(mismo objeto).
Gracias
Título: Re:Ayuda personajes meta
Publicado por: arcangelcaos en Marzo 02, 2015, 04:42:27 PM
Se me ocurre lo siguiente.
Te creas 2 variables.
meta1 y meta2

meta1=0
meta2=0
en el STEP DE LOS OBJETOS

if collision_point(x,y, objmeta)
     if meta1= 0
       meta1= 1
     else
       meta2=1


AHORA EN STEP DE LA META

if meta1= 1 and meta2= 1
  room_goto(la que sea)
Título: Re:Ayuda personajes meta
Publicado por: pacne en Marzo 02, 2015, 08:32:29 PM
No me funciona, lo he intentado poniento
if place_meeting(x,y,ob_cuadrado_meta)
Pero tampoco
Título: Re:Ayuda personajes meta
Publicado por: pacne en Marzo 02, 2015, 08:35:41 PM
Lo que paso esq utilizo el mismo objeto para el personaje y el mismo para la meta, si creo dos personajes y dos metas si que me funcionara, por lo menos creando otro personaje
Título: Re:Ayuda personajes meta
Publicado por: pacne en Marzo 02, 2015, 08:45:28 PM
Al final he tenido que crear otro personaje igual con la misma programacion y le he puesto esto al personaje 1:
if place_meeting(x,y,ob_cuadrado_meta)
{
    global.meta_1 = 1
}

if !place_meeting(x,y,ob_cuadrado_meta)
{
    global.meta_1 = 0
}


Muchas Gracias

Y al personaje 2:
if place_meeting(x,y,ob_cuadrado_meta)
{
    global.meta_1 = 1
}

if !place_meeting(x,y,ob_cuadrado_meta)
{
    global.meta_1 = 0
}

Título: Re:Ayuda personajes meta
Publicado por: pacne en Marzo 02, 2015, 08:59:25 PM
Ahora tengo otra pregunta, para no tener tanta progrmacion como puedo hacer que el personaje 2 haga los mismos movimiento que el personaje 1, sin utilizar el parent. Gracias
Título: Re:Ayuda personajes meta
Publicado por: penumbra en Marzo 02, 2015, 08:59:29 PM
Cita de: pacne en Marzo 02, 2015, 08:59:25 PM
Ahora tengo otra pregunta, para no tener tanta progrmacion como puedo hacer que el personaje 2 haga los mismos movimiento que el personaje 1, sin utilizar el parent. Gracias
El siguiente código debe funcionar con el planteamiento original, dos instancias de un mismo objeto personaje:


Usar un objeto controlador: objControl
CREATE (objControl)
[gml]
id_meta1 = noone
id_player1 = noone
id_meta2 = noone
id_player2 = noone[/gml]

En los eventos CREATE de cada objeto
Instancia player1: objControl.id_player1 = id; 
Instancia player2: objControl.id_player2 = id
Instancia meta1: objControl.id_meta1 = id
Instancia meta2: objControl.id_meta2 = id

Bajo esta idea, no es necesario un evento de colisión en ningún objeto, símplemente verificar las distancias de cada par player-meta. En el controlador:[gml]
if ( abs(point_distance(id_player1.x, id_player1.y, id_meta1.x, id_meta1.y)) < 50  ) and (abs(point_distance(id_player2.x, id_player2.y, id_meta2.x, id_meta2.y)) < 50  )
{
    //ir a la siguiente habitación
}[/gml]

El código está pensado para que los personajes tengan que estar A LA VEZ en la meta, para avanzar a la siguiente habitación. Si un personaje llega a la meta, pero la abandona, y después el otro llega a la meta, NO se va a pasar a la siguiente habitación (aunque esto se puede cambiar de manera fácil usando una variable adicional)
Título: Re:Ayuda personajes meta
Publicado por: pacne en Marzo 02, 2015, 09:12:35 PM
Gracias Penumbra