Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: p34 en Agosto 22, 2011, 05:49:11 AM

Título: Subir pendientes
Publicado por: p34 en Agosto 22, 2011, 05:49:11 AM
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
Título: Re: Subir pendientes
Publicado por: Jucarave en Agosto 22, 2011, 03:07:34 PM
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.
Título: Re: Subir pendientes
Publicado por: p34 en Agosto 22, 2011, 09:42:01 PM
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
Título: Re: Subir pendientes
Publicado por: Jucarave en Agosto 22, 2011, 10:48:28 PM
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
Título: Re: Subir pendientes
Publicado por: brunoxzx en Agosto 23, 2011, 01:20:58 AM
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]
Título: Re: Subir pendientes
Publicado por: J-Dek en Agosto 25, 2011, 06:39:30 PM
ese c?digo abr?a que ponerlo en el step de un objeto solido que quieres que tu personaje pase por encima?
Título: Re: Subir pendientes
Publicado por: brunoxzx en Agosto 25, 2011, 09:17:36 PM
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]