Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Silver_light en Agosto 31, 2012, 11:40:33 PM

Título: Problema con collision_rectangle
Publicado por: Silver_light en Agosto 31, 2012, 11:40:33 PM
Saludos!
veran, tengo un problema con la funcion collision_rectangle(), puesto que no cumple con lo que debería hacer, tengo este código en el objeto enemigo, en el evento de colision contra Marisa(Player).

[GML]
if (hspeed > 0)
{
if (collision_rectangle(x-18,y-10,x+5,y+8,marisa,true,true)) // colision caparazon
{
  with(other)
  {
   if (vspeed > 0)
    vspeed = -6;   
  }
}

if (collision_rectangle(x+6,y-8,x+18,y+8,marisa,true,true)) //colision caracol
{
  with(other)
  {
    // Acciones de daño.
  }
}
}
[/GML]

El problema es que se ejecutan las acciones de daño, cuando el personaje colisiona con el caparazón. Lo cual no debería, sino que únicamente deberían cuando colisiona con el caracol.
Hice modificaciones e incluso he dibujado rectángulos para representar las colisiones pero no encuentro el problema.
Saludos!
Título: Re:Problema con collision_rectangle
Publicado por: Texic en Septiembre 01, 2012, 12:49:52 AM
Creo que el problema se debe a que la velocidad del personaje probablemente supera los 2 píxeles por segundo en la caida, entonces si se encuentra entre ambos la colisión da verdadero para ambos. Cuando colisiona con el caparazón vuelve para arriba? si es así entonces es simplemente colocar un else para que el caparazón tenga prioridad en la colisión, ya que está más arriba que el caracol. Así
[GML]if (hspeed > 0)
{
if (collision_rectangle(x-18,y-10,x+5,y+8,marisa,true,true)) // colision caparazon
{
  with(other)
  {
   if (vspeed > 0)
    vspeed = -6;   
  }
}
else{
if (collision_rectangle(x+6,y-8,x+18,y+8,marisa,true,true)) //colision caracol
{
  with(other)
  {
    // Acciones de daño.
  }
}
}}[/GML]
Título: Re:Problema con collision_rectangle
Publicado por: Silver_light en Septiembre 01, 2012, 02:57:36 AM
apapap...
muchas gracias, ese era el problema!
Gracias por responder :)