Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: djboro88 en Mayo 28, 2014, 07:02:44 PM

Título: [SOLUCIONADO] Doble colisión
Publicado por: djboro88 en Mayo 28, 2014, 07:02:44 PM
Hola a todos !!
Tengo una duda sobre como hacer que se compruebe que dos objetos están colisionando a la vez.

(http://www.subeimagenes.com/img/crokis-977035.jpg)

La cuestión es:
Quiero que pase de room, solo y únicamente cuando playerRojo esté colisionando con metaRoja y además playerAzul esté colisionando con metaAzul.
¿Cómo se puede conseguir eso?
Saludos !!
Título: Re:Doble colisión
Publicado por: penumbra en Mayo 28, 2014, 08:17:18 PM
Hay muchas maneras de lograrlo, por ejemplo:

if place_meeting( playerRojo.x, playerRojo.y, obj_metaRoja) and place_meeting( playerAzul.x, playerAzul.y, obj_metaAzul)
     //Cambiar de habitación



Título: Re:Doble colisión
Publicado por: djboro88 en Mayo 28, 2014, 08:24:57 PM
Pero ese código, lo pongo dentro ¿de que evento?
CREATE, STEP, COLLISION...

Lo he colocado en el collision de obj_metaRoja y obj_metaAzul, pero no funciona.
Título: Re:Doble colisión
Publicado por: penumbra en Mayo 28, 2014, 08:42:52 PM
El código detecta colisiones, si se pone en un evento de colisión, no tiene mucho sentido, el evento de colisión hace la misma labor, por lo que el código entonces se podría desechar. Piensa como pensaría el GM  ;D (Por supuesto que se puede usar el evento de colisión y desechar el código, como dije, hay distintas maneras de hacerlo, pero si se usan los eventos de colisión es necesario crear más variables para comprobar la doble colisión )
Título: Re:Doble colisión
Publicado por: djboro88 en Mayo 28, 2014, 10:14:12 PM
He probado en eventos create, step y collision y en ninguno hace nada.
Le he dicho q en vez de que pase de nivel (como son pruebas y no tengo otra room), le he dicho q muestre un mensaje.

if place_meeting(obj_RedPlayer.x, obj_RedPlayer.y, obj_metaRoja) and place_meeting(obj_BluePlayer.x, obj_BluePlayer.y, obj_metaAzul){
    show_message("FIN");
}


Como digo, no sale el mensaje por ningun lado.
No se cual puede ser el problema. ¿Alguna idea?
Título: Re:Doble colisión
Publicado por: Cerez0 en Mayo 28, 2014, 11:40:42 PM
Cita de: djboro88 en Mayo 28, 2014, 10:14:12 PM
He probado en eventos create, step y collision y en ninguno hace nada.
Le he dicho q en vez de que pase de nivel (como son pruebas y no tengo otra room), le he dicho q muestre un mensaje.

if place_meeting(obj_RedPlayer.x, obj_RedPlayer.y, obj_metaRoja) and place_meeting(obj_BluePlayer.x, obj_BluePlayer.y, obj_metaAzul){
    show_message("FIN");
}


Como digo, no sale el mensaje por ningun lado.
No se cual puede ser el problema. ¿Alguna idea?

porque no lo haces con variables?

En el create de cualquiera de los 2 jugadores (pero solo en 1 de los 2) pon esto:

global.fin = 0; // creamos la variable global y le damos valor 0


Despues tienes que poner en el  evento colision de cada jugador con su meta  pon esto:

global.fin += 1; // Sumamos 1 a la variable global fin


y en el obj meta pones esto en el  evento step (con que esto lo pongas en 1 de los 2 obj meta sobra):


// aqui decimos que si la variable global.fin es igual a 2 se cumpla la condicion (cuando los 2 llegan a la meta)
if global.fin = 2{
show_message("FIN");
}


prueba eso aver si te sirve ;) Un saludo

Título: Re:Doble colisión
Publicado por: 3dgeminis en Mayo 29, 2014, 06:52:00 AM
Te dejo un ejemplo. Segun entendi tienen que estar ambos jugadores en la meta al mismo tiempo para pasar de nivel, no???
Título: Re:Doble colisión
Publicado por: djboro88 en Mayo 29, 2014, 11:02:43 AM
No he visto tu ejemplo, pero lo que he hecho es lo siguiente.

Hacer un objeto y ponerlo al iniciar el room, con evento CREATE
//NIVEL 1
global.finNivel1_rojo = 0;
global.finNivel1_azul = 0;



Despues en las colisiones de los player:
global.finNivel1_rojo = 1;

global.finNivel1_azul = 1;

Y para terminar en una de las metas, en el evento STEP
if global.finNivel1_rojo = 1 and global.finNivel1_azul = 1 {
    show_message("FIN NIVEL 1");
}


Y así funciona perfecto !!
Título: Re:[SOLUCIONADO] Doble colisión
Publicado por: 3dgeminis en Mayo 29, 2014, 04:28:16 PM
Pero de ese modo si por ejemplo el jugador rojo llega a la meta y se aleja y despues llega el jugador azul, aun asi se activaria el mensaje. No hay necesidad de crear un nuevo objeto, podrias poner ese codigo global.finNivel1_rojo = 0; global.finNivel1_azul = 0; en uno de los objetos meta.
Título: Re:Doble colisión
Publicado por: djboro88 en Mayo 29, 2014, 05:54:42 PM
Cierto...  :-[

Entonces, para hacer que se muestre el mensaje solo cuando ambos players estén (tocando o colisionando en ella) en sus metas, ¿cómo se hace?
Título: Re:Doble colisión
Publicado por: djboro88 en Mayo 29, 2014, 09:00:41 PM
Ya lo tengo como yo quería !!
mezclando un poco de toda la ayuda recibida.

En un objeto aparte, en CREATE:
//NIVEL 1
global.finNivel1_rojo = 0;
global.finNivel1_verde = 0;

//Configuracion inicial
global.Score = 0;



Y en STEP:
//Están los dos tocando la meta
if global.finNivel1_rojo = 1 and global.finNivel1_azul = 1 { show_message("FIN NIVEL 1"); }

//Si tocan la meta cambiar variable a 1 sino 0
if place_meeting(obj_RedPlayer.x, obj_RedPlayer.y, obj_metaRoja){ global.finNivel1_rojo = 1; }else{ global.finNivel1_rojo = 0; }
if place_meeting(obj_BluePlayer.x, obj_BluePlayer.y, obj_metaAzul){ global.finNivel1_azul = 1; }else{ global.finNivel1_azul = 0 }


Nota: Lo hago en un objeto aparte para tenerlo mas claro si en el futuro me toca modificarlo.

Saludos y Gracias a todos !!