A lo que me refiero con el título es al haber un solo personaje (player 1) al trepar las escaleras, en la parte superior de la escalera hay un objeto que si el personaje esta debajo, la mascara del objeto se pone en -1 para que el personaje lo pueda pasar, y al llegar a la cima, la mascara cambia a la del sprite para que el personaje se pueda parar encima (exactamente a como funciona en los juegos de Megaman).

El problema es que cuando agrego a un segundo jugador todo el código se descontrola, ya que el objeto en la cima de la escalera se confunde porque puede haber tanto un personaje en la cima como otro debajo, y no sabe cuando cambiar la máscara.

Habia pensado en hacer dos objetos en la cima de la escalera, uno para cada jugador, pero tendria que hacer que el jugador 1 no detecte el objeto de la cima de la escalera perteneciente al del jugador 2 y viceversa.

Como puedo hacer? Si se volvió muy confusa la explicación avisenme que lo explico mejor  XD

#1 Diciembre 09, 2015, 12:35:31 AM Ultima modificación: Diciembre 09, 2015, 01:06:29 AM por penumbra
lo que falla es que estás usando detección por objeto, ejemplo "Si hay un objeto en tal posición..." o "si choco con el objeto tal"

Hay muchas funciones que pueden usarse para resolver tu problema, incluso desde el evento de colisión se puede resolver, usando la palabra other. Sería mejor que colocaras el código que usas para las colisiones y cómo están colocados el origen del sprite tanto en el jugador como en el objeto encima de las escaleras. Así es más fácil saber qué modificar.

yo pondría código en los personajes, en vez de en el suelo
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

#3 Diciembre 09, 2015, 01:19:24 AM Ultima modificación: Diciembre 09, 2015, 01:40:58 AM por Kain88
El código que uso es el siguiente, también aclaro que el objeto que uso en la cima de la escalera tiene como parent al objeto que uso para el suelo y las paredes (obj_wall en el código)


//Horizontal
if (place_meeting(x+hspd,y,obj_wall))
{
    while(!place_meeting(x+sign(hspd),y,obj_wall))
    {
        x += sign(hspd);
    }
    hspd = 0;
}
x += hspd;

//Vertical
if (place_meeting(x,y+vspd,obj_wall))
{
    while(!place_meeting(x,y+sign(vspd),obj_wall))
    {
        y += sign(vspd);
    }
    vspd = 0;
}
y += vspd;


Y el código que uso para detectar las escaleras es el siguiente:
Si el personaje esta en el suelo

if (place_meeting(x, y, obj_ladder && keyboard_check(vk_up)))
{
    //Código
}


Si el personaje esta en la cima de la escalera

if (place_meeting(x, y + 1, obj_ladder_top) && keyboard_check(vk_down)))
{
    //Código
}


El origen del sprite de los personajes es en el centro y el origen del objeto de la cima de la escalera es eje x en el centro, eje y en 0.

concuerdo con kostra, el código debería ser pensado para ir en el personaje,
entra a!: