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
Una persona puede equivocarse mil veces pero solo fracasa cuando le echa la culpa a otro por sus errores

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.

Checa mi canal de Youtube para tutoriales y charlas sobre desarrollo de videojuegos.


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
Una persona puede equivocarse mil veces pero solo fracasa cuando le echa la culpa a otro por sus errores

#3 Agosto 22, 2011, 10:48:28 PM Ultima modificación: Agosto 22, 2011, 10:50:14 PM por Jucarave
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

Checa mi canal de Youtube para tutoriales y charlas sobre desarrollo de videojuegos.


#4 Agosto 23, 2011, 01:20:58 AM Ultima modificación: Agosto 23, 2011, 07:43:13 PM por brunoxzx
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]