Hola, estoy haciendo un juego tipo metal slug pero no se hacer que suba escaleras ni pendientes :'(
Si alguien me pudiera ayudar con algun codigo (o serie de codigos) para hacer que suba escaleras se lo agardeceria mucho
el codigo es sencillo, pero puede ser dificil de entender al principio
supongamos que para moverte usas
[gml]if (keyboard_check(vk_right)){
x += 4;
}[/gml]
Asi que usas el siguiente:
[gml]if (keyboard_check(vk_right)){
for (i=0;i<=32;i+=1){
if (place_free(x+4,y-i)){
x += 4;
y -= i;
exit;
}
}
}[/gml]
basicamente lo que hace es buscar un espacio libre para poderse mover, en el i<=32 cambias el valor de 32 dependiendo de la inclinacion de la rampa.
Este codigo te servira para subir rampas/escaleras en un juego de plataformas, pero no para bajarla (para eso tienes que modificar un poco el codigo)
Saludos.
Excelente, Gracias.
Lo probare pero de solo verlo parece excelente y nunca se me hubiera ocurrido usar un ciclo FOR para resolver esto.
Para bajar tendria que poner
[gml]if (keyboard_check(vk_right)){
for (i=0;i>=32;i-=1){
if (place_free(x+4,y-i)){
x += 4;
y += i;
exit;
}
}
}[/gml]
o como seria?
Muchas gracias por la ayuda :D
Hola, espero que te funcione, para bajar seria asi:
[gml]if (keyboard_check(vk_right)){
for (i=0;i<=32;i+=1){
if (place_free(x+4,y+1)){
if !(place_free(x+4,y+i)){
x += 4;
y += i-1;
exit;
}
}
}
}[/gml]
este tendria que ir antes de el de subida:
[gml]if (keyboard_check(vk_right)){
for (i=0;i<=32;i+=1){
if (place_free(x+4,y+1)){
if !(place_free(x+4,y+i)){
x += 4;
y += i-1;
exit;
}
}else{
if (place_free(x+4,y-i)){
x += 4;
y -= i;
exit;
}
}
}
}[/gml]
Yo ciertamente lo tengo en un juego mio y funciona...
PD: nunca pongas [gml]for (i=0;i>=32;i-=1){[/gml] ya que eso seria un ciclo infinito (o un error, no estoy seguro).
PD2: los valores de 32 y 4, son muy relativos al tama?o de tu sprite... Para mi juego uso sprites de 32*32 pixeles por lo que un movimiento de 4 esta bien... Asi que fijate bien y adecua eestos valores a tus necesidades
Saludos
Pues a mi se me acaba de ocurrir un m?todo, ya lo prob? y funciono aunque tal vez tenga algunos errores.
[gml]x+=(keyboard_check(vk_right)-keyboard_check(vk_left))*4
if !place_free(x,y){
move_outside_solid(90,12)
}else{
move_contact_solid(270,12)
}
if !place_free(x,y){
y=yprevious x=xprevious
}else{
if y==yprevious+12{
y=yprevious
}
}[/gml]
ese c?digo abr?a que ponerlo en el step de un objeto solido que quieres que tu personaje pase por encima?
No, en el step de tu personaje, tambi?n tienes que poner este c?digo en el evento de colisi?n con un muro.
[gml]move_contact_solid(direction,12)
vspeed=0[/gml]