Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: malissimofilms en Junio 13, 2011, 09:19:00 PM

Título: Trepar por una pared
Publicado por: malissimofilms en Junio 13, 2011, 09:19:00 PM
Buenas, me gustaria saber que hay que hacer para que mi personaje cuando colisiona con una pared se quede pegado y luego pueda trepar por la pared.
Título: Re: Trepar por una pared
Publicado por: JChamaco en Junio 13, 2011, 11:06:08 PM
1- Buscaste en descargas?
2- Pss supongo que asi:

Personaje:
Create:
Trepa=0;

Step:
scr_Trepa(vk_up,vk_down);

Ahora crea un script llamado: scr_Trepa, con lo siguiente en el:
/*
argument0 = Tecla Arriba
argument1 = Tecla Abajo
*/
var Pared;

//El c?digo se ejecuta cuando el personaje esta sobre una pared y presiona arriba o abajo, o si ya esta trepando
if (place_meeting(x,y,obj_Pared) &&(Trepa || (keyboard_check(argument0) || keyboard_check(argument1))))
    {
    Trepa = 1;
    vspeed = 0;
    gravity = 0;
    image_speed = 0;
    //Cuando se presiona arriba o abajo se centra el personaje y se le anima
    if (keyboard_check(argument0) || keyboard_check(argument1))
        {
        Pared = instance_nearest(x,y,obj_Pared);
        x = Pared.x;
        image_speed = 0.25;
        }
   
    //Cuando se presiona arriba se hace que el personaje suba
    if (keyboard_check(argument0))
    {
    move_contact_solid(90,2);
    }
    //Cuando se presiona abajo se hace que el personaje baje
    if (keyboard_check(argument1))
    {
    move_contact_solid(270,2);
    if (!place_free(x,y+1)) Trepa = 0;
    }
   
    }

//Cuando se pierde contacto con la pared se deja de trepar
if (!place_meeting(x,y,obj_Pared)) Trepa = 0;


Espero haberte ayudado.  :)
Título: Re: Trepar por una pared
Publicado por: malissimofilms en Junio 13, 2011, 11:48:37 PM
Perdona, pero no me ha funcionado :S, esto es lo que he puesto, dime si esta bien.

/*
argument0 = Tecla Arriba
argument1 = Tecla Abajo
*/
var Pared;

//El c?digo se ejecuta cuando el personaje esta sobre una pared y presiona arriba o abajo, o si ya esta trepando
if (place_meeting(x,y,pegar) &&(Trepa || (keyboard_check("W") || keyboard_check("S"))))
    {
    Trepa = 1;
    vspeed = 1;
    gravity = 1;
    image_speed = 1;
    //Cuando se presiona arriba o abajo se centra el personaje y se le anima
    if (keyboard_check("W") || keyboard_check("S"))
        {
        Pared = instance_nearest(x,y,pegar);
        x = Pared.x;
        image_speed = 0.25;
        }
   
    //Cuando se presiona arriba se hace que el personaje suba
    if (keyboard_check("W"))
    {
    move_contact_solid(90,2);
    }
    //Cuando se presiona abajo se hace que el personaje baje
    if (keyboard_check("S"))
    {
    move_contact_solid(270,2);
    if (!place_free(x,y+1)) Trepa = 0;
    }
   
    }

//Cuando se pierde contacto con la pared se deja de trepar
if (!place_meeting(x,y,pegar)) Trepa = 0;

El suelo donde el personaje trepa, lo he marcado como solido y le he puesto en el evento step (del personaje que trepa) move to contact y Speed vertical.
Título: Re: Trepar por una pared
Publicado por: JChamaco en Junio 14, 2011, 12:19:44 AM
Mira, copia y pega asi como te lo pongo (ya me di cuenta que teclas usas para arriba y abajo xD):

Create:
Trepa=0;

Step:
scr_Trepa;

Script scr_Trepa:
var Pared;

//El c?digo se ejecuta cuando el personaje esta sobre una pared y presiona arriba o abajo, o si ya esta trepando
if (place_meeting(x,y,pegar) &&(Trepa || (keyboard_check(ord("W")) || keyboard_check(ord("S")))))
    {
    Trepa = 1;
    vspeed = 0;
    gravity = 0;
    image_speed = 0;
    //Cuando se presiona arriba o abajo se centra el personaje y se le anima
    if (keyboard_check(ord("W")) || keyboard_check(ord("S")))
        {
        Pared = instance_nearest(x,y,pegar);
        x = Pared.x;
        image_speed = 0.25;
        }
   
    //Cuando se presiona arriba se hace que el personaje suba
    if (keyboard_check(ord("W")))
    {
    move_contact_solid(90,2);
    }
    //Cuando se presiona abajo se hace que el personaje baje
    if (keyboard_check(ord("S")))
    {
    move_contact_solid(270,2);
    if (!place_free(x,y+1)) Trepa = 0;
    }
   
    }

//Cuando se pierde contacto con la pared se deja de trepar
if (!place_meeting(x,y,pegar)) Trepa = 0;
Título: Re: Trepar por una pared
Publicado por: malissimofilms en Junio 14, 2011, 08:25:02 PM
Cita de: JChamaco en Junio 14, 2011, 12:19:44 AM
Mira, copia y pega asi como te lo pongo (ya me di cuenta que teclas usas para arriba y abajo xD):

Create:
Trepa=0;

Step:
scr_Trepa;

Script scr_Trepa:
var Pared;

//El c?digo se ejecuta cuando el personaje esta sobre una pared y presiona arriba o abajo, o si ya esta trepando
if (place_meeting(x,y,pegar) &&(Trepa || (keyboard_check(ord("W")) || keyboard_check(ord("S")))))
    {
    Trepa = 1;
    vspeed = 0;
    gravity = 0;
    image_speed = 0;
    //Cuando se presiona arriba o abajo se centra el personaje y se le anima
    if (keyboard_check(ord("W")) || keyboard_check(ord("S")))
        {
        Pared = instance_nearest(x,y,pegar);
        x = Pared.x;
        image_speed = 0.25;
        }
   
    //Cuando se presiona arriba se hace que el personaje suba
    if (keyboard_check(ord("W")))
    {
    move_contact_solid(90,2);
    }
    //Cuando se presiona abajo se hace que el personaje baje
    if (keyboard_check(ord("S")))
    {
    move_contact_solid(270,2);
    if (!place_free(x,y+1)) Trepa = 0;
    }
   
    }

//Cuando se pierde contacto con la pared se deja de trepar
if (!place_meeting(x,y,pegar)) Trepa = 0;


Gracias, ahora si que me ha funcionado  :D
Título: Re: Trepar por una pared
Publicado por: elviskelley en Junio 14, 2011, 10:18:10 PM
Mmm... la idea no es andar copiando y pegando si no el intentar entender lo codigos.

yo solo abria puesto en event de la tecla right
if place_meeting(x+2,y,objPared)
{gravity=0;}

en el event de la tecl?a left
if place_meeting(x-2,y,objPared)
{gravity=0;}
event de tecla up.
if place_meeting(x-2,y,objPared)
{gravity=0; y-=2;}
event de tecla down.
if place_meeting(x-2,y,objPared)
{gravity=0; y+=2;}

no lo he probado pero deberia funcionar en caso contrario quito la Y y coloco move_contac_solid(90,2)para up y  move_contac_solid(270,2) para down.