Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: zorge en Febrero 29, 2016, 02:07:48 AM

Título: saber con que parte colisiona
Publicado por: zorge en Febrero 29, 2016, 02:07:48 AM
Buenas de nuevo, a ver tengo un obj_Player y un obj_enemigo en un momento dado estos colisionan y al producirse la colision se priduce un efecto de daño en el origen del obj_player como podria hacer para que el efecto de daño se reproduzca en el sitio que contacta el player con el enemigo ya que el efecto de daño es un script gracias de antemano como siempre a todos.
Título: Re:saber con que parte colisiona
Publicado por: Zardon00Games en Febrero 29, 2016, 03:18:46 AM
dale click al sprite, cuando te salga el menu en donde dice precise collision check lo precionas, si quieres que sea diferente la colision, dale a modify mask y ahi lo pones como quieras :3
Título: Re:saber con que parte colisiona
Publicado por: zorge en Febrero 29, 2016, 03:41:03 AM
Cita de: Zardon00Games en Febrero 29, 2016, 03:18:46 AM
dale click al sprite, cuando te salga el menu en donde dice precise collision check lo precionas, si quieres que sea diferente la colision, dale a modify mask y ahi lo pones como quieras :3
no creo que no has entendido el problema, la colisión ya esta bien hecha el problema es que quiero saber justo en que punto colisionan los dos objetos para crear justo en ese punto de colisión un efecto con un script, por ejemplo si el player colisiona con el enemigo en la pierna justo en ese sitio tenga el efecto que le quiero añadir o si colisiona con el enemigo en la cabeza que se produzca ahí el efecto dejo una imagen para aclarar todo.
Título: Re:saber con que parte colisiona
Publicado por: Zardon00Games en Febrero 29, 2016, 03:57:44 AM
puedes separar los sprites en objetos, cabeza, torzo, piernas, y pones la accion que quieras quqe haga en los eventos de la pierna, cabeza o torzo :3, tardaras un poco al moverlos pero sirve
Título: Re:saber con que parte colisiona
Publicado por: Clamud en Febrero 29, 2016, 04:31:12 AM
Otra solución que se me ocurre es calcular la posición media entre las dos instancias y ahí crear el efecto
[gml]
//Step
colision = false;

//Evento Collision
colision = true;
xx = (x + other.x)/2; //estas serían las coordenadas del efecto
yy = (y + other.y)/2;
[/gml]
Título: Re:saber con que parte colisiona
Publicado por: zorge en Febrero 29, 2016, 02:35:45 PM
Cita de: Clamud en Febrero 29, 2016, 04:31:12 AM
Otra solución que se me ocurre es calcular la posición media entre las dos instancias y ahí crear el efecto
[gml]
//Step
colision = false;

//Evento Collision
colision = true;
xx = (x + other.x)/2; //estas serían las coordenadas del efecto
yy = (y + other.y)/2;
[/gml]Creo que esta es buena solución aunque no se porque sigue creando el efecto en el origen del obj_player seguramente sea que yo no he sabido colocarlo o no saber en que parte colocarlo ya que es un script¿ en esa parte de codigo que me has dando donde deberia ponerque se crease el efecto???
Título: Re:saber con que parte colisiona
Publicado por: Clamud en Febrero 29, 2016, 05:13:24 PM
Depende de cómo se muestre el efecto; podría ser en el evento End Step, Draw, o culaquier otro evento que se ejecute después de la colisión. Ahí se tendría que revisar la variable colision
[gml]
if( collision )
{
    //crear efecto en (xx, yy)
}
[/gml]
También se podría crear en el evento colisión, si el efecto es un objeto o partículas.
Uno de los problemas que podrían surgir, si no hay un mecanismo que desplaze al objeto a un lugar sin colisión, es que el efecto se creará constantemente, en cada Step.

También he pensado que la posición promedio no se ajustaría bien si los objetos son de diferentes tamaños y formas. Tal vez las coordenadas del efecto queden mejor de esta forma:
[gml]
//Evento Collision
colision = true;
xx = clamp( other.x, bbox_left, bbox_right );
yy = clamp( other.y, bbox_top, bbox_bottom );
[/gml]
Título: Re:saber con que parte colisiona
Publicado por: zorge en Febrero 29, 2016, 05:21:25 PM
Cita de: Clamud en Febrero 29, 2016, 05:13:24 PM
Depende de cómo se muestre el efecto; podría ser en el evento End Step, Draw, o culaquier otro evento que se ejecute después de la colisión. Ahí se tendría que revisar la variable colision
[gml]
if( collision )
{
    //crear efecto en (xx, yy)
}
[/gml]
También se podría crear en el evento colisión, si el efecto es un objeto o partículas.
Uno de los problemas que podrían surgir, si no hay un mecanismo que desplaze al objeto a un lugar sin colisión, es que el efecto se creará constantemente, en cada Step.

También he pensado que la posición promedio no se ajustaría bien si los objetos son de diferentes tamaños y formas. Tal vez las coordenadas del efecto queden mejor de esta forma:
[gml]
//Evento Collision
colision = true;
xx = clamp( other.x, bbox_left, bbox_right );
yy = clamp( other.y, bbox_top, bbox_bottom );
[/gml]
me tira error con el if (collision)
Título: Re:saber con que parte colisiona
Publicado por: Clamud en Febrero 29, 2016, 05:24:30 PM
Declara la variable en el evento Create
[gml]
colision = false;
[/gml]
Título: Re:saber con que parte colisiona
Publicado por: zorge en Febrero 29, 2016, 05:36:12 PM
si perdon,ya lo hice y se fue el error pero nada sigo sin conseguir que salga del punto en que colisiona aunque bueno he hecho una pequeña trapa para que quede medianamente bien y medio a resultado asi que lo voy a dejar asi,muchas gracias por vuestras respuestas