Hola amigos makeros, tengo un inconveniente con mi juego.
Tengo un personaje que se mueve en una plataforma, haciendo de patineta. El caso es que cuando esta patineta colisiona con un objeto, en este caso es una manzana como item, se queda trabado. Incluso a veces no lo hace pero se queda quieto unos cuantos pixeles haciendo que se descuadre el personaje y la patineta.

El código que uso para que mi personaje quede encima de la patineta es el usual para los juego de plataforma...

Tengo estos códigos:

Player -> colision patineta:
[GML]
vspeed = 0;
move_contact_solid(270,12);
[/GML]

Player->Step
[GML]
if (place_free(x,y+1))
    gravity = 0.6;
else
    gravity = 0;
   
   
if (place_meeting(x,y+35,tabla_skate))
{
    if (saltar) && (vspeed > 0)
        sprite_index = spr_player;
}
else
{
    if (saltar)
        sprite_index = spr_player_salta;
}

if (keyboard_check(vk_left))
{
    repeat(velocidad)
    {
        if (x > 0)
        {
            x -= 1;
            tabla_skate.x -= 1;   
        }
    }
}

if (keyboard_check(vk_right))
{
    repeat(velocidad)
    {
        if (x < room_width)
        {
            x += 1;
            tabla_skate.x += 1;   
        }
    }
}

if (keyboard_check(vk_up))
{
    repeat(velocidad)
    {
        if (y > 195)
        {
            y -= 1;
            tabla_skate.y -= 1;
        }
    }
}

if (keyboard_check(vk_down))
{
    repeat(velocidad)
    {
        if (y < 390)
        {
            y += 1;
            tabla_skate.y += 1;
        }
    }
}
[/GML]

Tabla -> colision con item manzana
[GML]
score +=100;
with(other) instance_destroy();
[/GML]

Destaco que la tabla es solida, como antes mencionaba, es una plataforma dentro de todo. Y el item de manzana es no-solido.

espero me puedan ayudar :D





#3 Febrero 28, 2014, 03:51:40 AM Ultima modificación: Febrero 28, 2014, 04:09:51 AM por vampy09
Lo que sucede es que cuando un objeto es marcado como solido, este objeto se comporta diferente en el evento Collision, dado que aunque tu no pongas codigo dentro del evento, el GM automaticamente realiza ciertas acciones "detras de escena" con todo objeto marcado como solido.

Evento Collision de un objeto "Solido"
Aclaro esto sucede para ambas instancias
1)las instancias son puestas en una posicion previa a la colision.

2)las acciones que se encuntren dentro del evento Collision son ejecutadas ( en tu caso score +=100; with ( other ) instance_destroy ();  )

3)Ambas instancias son puestas en sus nuevas posiciones basado en su speed.

4)Un chequeo adicional es hecho,  asegurando que las instancias no estan colisionando y si es asi, las instancias son.puestas de vuelta a su posicion previa de nuevo.

El hecho que tu patineta sea solida provoca que cuando colisiona con el obj_item suceda todo lo anterior aunque tu no la hayas programado! Lo que debe estar afectando su hspeed.
Entoces crea otro objeto que tenga un sprite del jugador subido en la patineta o debes hacer que el obj_patineta una plataforma movil pero no solida.
The next best thing to knowing something,
is knowing where to find it.

Haa! vale vale, ya entiendo.
No sabía que Game Maker hacía esas verificaciones con objetos solidos.

Entonces cambio la plataforma a no sólida.

Dale, gracias por el dato :D