Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: sith006 en Noviembre 07, 2015, 08:37:07 PM

Título: hilos de ejecucion en dos objetos que collisionan ?
Publicado por: sith006 en Noviembre 07, 2015, 08:37:07 PM
Hola gente ! Tengo una consulta sobre el orden de ejecucion de un evento de colision..

El objeto A colisiona con el objeto B y en ambos el evento colision dispara una parte del codigo.
La pregunta es.. Hay manera de saber cual de los 2 eventos colision se dispara primero ? y en el caso
que se pueda , puedo cambiar este orden ?

En el objetoA.colision con objeto B se crea una variable que es necesaria en el codigo de objetoB.colision
con el objeto A . Creo que es por esto que no funciona mi codigo.

Desde ya , muchas gracias.
Título: Re:hilos de ejecucion en dos objetos que collisionan ?
Publicado por: penumbra en Noviembre 07, 2015, 08:46:23 PM
No se me ocurre por qué lo visualizas así. Es cierto que tanto en el objeto A como en el B se puede colocar un evento de colisión contra el otro objeto, pero nunca me he visto en una situación donde este chequeo "doble" sea necesario, ya que, como entiendo (no sé si me equivoque), la colisión A vs B y B vs A es la misma, por lo que sólo es necesario recurrir a un evento de colisión, en cualquiera de los dos objetos.

¿Qué es exactamente lo que quieres hacer?

Supongo que el orden de ejecución del evento colisión dependará de cuál de las instancias se creó primero. Esto se puede saber utilizando el depurador.
Título: Re:hilos de ejecucion en dos objetos que collisionan ?
Publicado por: sith006 en Noviembre 07, 2015, 09:00:08 PM
Se crean muchos objetosB durante el juego . Al obj A , cuando collisiona con el objeto B , le paso el id de esa instancia de B para poder saber la posicion x e y en que se encuentra.

El juego que estoy haciendo es isometrico asi que quiero saber si el objB se encuentra " abajo izq " "arriba izq" " arriba der " o " abajo der " . Dependiendo de donde este interactua de manera diferente con objeto A .  por eso , esa parte se encuentra en collision de B (para que el id sea el especifico de la instancia B con la cual choca A )

En el collision del objeto A tengo la " consecuencia " del choque , (el personaje hacia el mismo lado donde se encontraba el objeto B).
Título: Re:hilos de ejecucion en dos objetos que collisionan ?
Publicado por: penumbra en Noviembre 07, 2015, 09:14:43 PM
Ah bueno. Insisto, se puede hacer usando un solo evento de colisión.

Encuentro más conveniente aprovechar una bondad del evento de colisión. En el objeto A, evento de colision con B, puedes usar:
[gml]
if (other.x > x)
     //Esta instancia de B está a la derecha de A
[/gml]
La palabra other sólo se puede usar en un contexto de colisión (o en una sentencia with). En el caso de las colisiones, other es la otra instancia con la que se colisiona (dependiendo del objeto que llame al evento colision). No es necesario pasar el id usando un evento de colisión en cada objeto, ya que como estarás imaginando, se puede hacer lo siguiente
[Colisión con obj_B desde obj_A]
[gml]
i_d = other.id    //Obtener el id, de la instancia de B contra la que se colisiona.
[/gml]
y usar i_d como quieras, en el mismo evento de colisión o fuera, en step, por ejemplo.


Título: Re:hilos de ejecucion en dos objetos que collisionan ?
Publicado por: sith006 en Noviembre 07, 2015, 09:23:52 PM
ahh no la tenia esa de usar " other " , me viene al pelo .
te agradezco de nuevo , vivís salvándome la vida jaja. Gracias !  :)
Título: Re:hilos de ejecucion en dos objetos que collisionan ?
Publicado por: vitito93 en Noviembre 12, 2015, 08:09:41 AM
podes usar other.x other.y

tambien podes poner instancia1=instance_create(x+20,y,obj_a)

instancia1.x=30

otra manera..
with(other){
speed=xxx
direction=xxx
}

para la respuesta de cual se genera primero, en el evento de colision de cada uno, pone un mensaje de debug diferente..
show_debug_message("Choco a con b")
show_debug_message("Choco b con a")
y abajo en la consola va a salir cual se detecto 1ro