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.
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. :)
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.
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;
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
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.