Diciembre 03, 2015, 01:35:57 AM Ultima modificación: Agosto 10, 2017, 05:07:50 AM por Johann
Hola comunidad ;) estoy desarrollando un juego de plataformas y es la primera vez que toco el tema de GML y la verdad es que no soy ningun experto, y gracias a los videos de Shaun Spalding he aprendido algo, pero quiero que al apretar la tecla espacio la gravedad cambie, mi grav normal es hacia abajo osea 270º y quiero que cambia hacia arriba osea 90º el codigo en el event step que uso es el de el, que es el siguiente:

................................................................
[gml]
// Mover
key_right = keyboard_check(vk_right);
key_left = -keyboard_check(vk_left);
key_jump = keyboard_check_pressed(vk_up);

//accion
move = key_left + key_right;
hsp = move * movespeed;
if (vsp < 10) vsp += grav;

if (place_meeting(x,y+1, obj_wall))
{
    vsp = key_jump * -jumpspeed
}

//colision horizontal
if (place_meeting(x+hsp,y,obj_wall))

{
    while(!place_meeting(x+sign(hsp),y,obj_wall))
    {
        x += sign(hsp);
    }
    hsp = 0;
}
x += hsp;

//colision vertical
if (place_meeting(x,y+vsp,obj_wall))
{
    while(!place_meeting(x,y+sign(vsp),obj_wall))
    {
        y += sign(vsp);
    }
    vsp = 0;

}
y += vsp;

//animacion
if (move!=0) image_xscale = move;
if (place_meeting(x,y+1,obj_wall))
{
    if (move!=0) sprite_index = spr_playerWR; else sprite_index = spr_playerR
}
else
{
    if (vsp < 0) sprite_index = spr_playerJ; else sprite_index = spr_playerR;
}
[/gml]
...
intente hacerlo por mi cuenta con unos script que vi en el foro de yoyogames pero es dificil si yo ya me baso en otro gml o al menos a mi se me hace dificil  :'(

Sólo tienes que cambiar el signo de la variable grav, y cambiar la forma de limitar la velocidad:
[gml]
if keyboard_check_pressed( vk_space ) grav *= -1;
vsp = clamp( vsp, -10, 10 );
[/gml]

Si quieres que todo el juego se voltee, va a ser bastante complicado.

Cita de: Clamud en Diciembre 03, 2015, 01:55:34 AM
Sólo tienes que cambiar el signo de la variable grav, y cambiar la forma de limitar la velocidad:
[gml]
if keyboard_check_pressed( vk_space ) grav *= -1;
vsp = clamp( vsp, -10, 10 );
[/gml]

Si quieres que todo el juego se voltee, va a ser bastante complicado.

Funciona perfecto, solo un detalle, quiero que cuando la cambie me jale el personaje hacia arriba, osea si estoy en el suelo "obj_block" tengo que saltar para que se note qeu cambio la gravedad y que el sprite cambie osea se voltee  :(

Tienes que agregar código en step para revisar que encima del personaje no hay nada con lo que pueda colisionar (pared, por ejemplo), y si es así, hacerlo que suba. cambiando su coordenada Y.

Cita de: penumbra en Diciembre 03, 2015, 02:25:03 AM
Tienes que agregar código en step para revisar que encima del personaje no hay nada con lo que pueda colisionar (pared, por ejemplo), y si es así, hacerlo que suba. cambiando su coordenada Y.

no se de gml asi que no se hacer a lo que te refieres :s seria con

If place_meeting dios que me vuelvo un ocho con esto  ???

Modifique un poco tu codigo para que se pueda hacer el cambio de gravedad:

CREATE creas una variable para controlar el cambio de gravedad[gml]
cambio=1
[/gml]
STEP  aqui agregas la variable a esta parte del codigo ademas de la tecla ENTER para hacer el cambio de gravedad
[gml]
if keyboard_check_pressed(vk_enter) {cambio*=-1} ///tecla de prueba para cambiar la gravedad

//colision vertical
if (place_meeting(x,y+(vsp*cambio),obj_wall))
{
    while(!place_meeting(x,y+(sign(vsp)*cambio),obj_wall))
    {
        y += (sign(vsp)*cambio);
    }
    vsp = 0;

}
y += (vsp*cambio);
[/gml]