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!

#1 Septiembre 01, 2012, 12:49:52 AM Ultima modificación: Septiembre 01, 2012, 12:51:39 AM por Texic
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]




apapap...
muchas gracias, ese era el problema!
Gracias por responder :)