Buenas, estuve intentando hacer que al precionar la tecla W el jugador saltara, pero no anda, además estuve intentando hacer para que solo pueda precionar la tecla una sola vez, para que no deje apretado y siga saltando.
¿Un ayudita por favor? Desde ya muchas gracias.
saltando = 0;

if keyboard_check(ord("A"))
{
    x-=1;
}
if keyboard_check(ord("D"))
{
    x+=1;
}
if keyboard_check(ord("W")) && saltando == 0
{
    instance_position(x+1,y+3,Jugador);
    saltando = 1;
}
if keyboard_check_released(ord("W"))
{
    instance_position(x,y-3,Jugador);
    saltando = 0;
}

agrea un else a tu codigo para que solo tome en cuenta una tecla y listo, no deberá moverse si esta saltando

if keyboard_check(ord("A"))
{
    x-=1;
}
else
if keyboard_check(ord("D"))
{
    x+=1;
}
else
if keyboard_check(ord("W")) && saltando == 0
ETC


o simplemente agrega una verificacion de si no esta en el aire para q se puede mover

if keyboard_check(ord("A")) and !place_free(x,y+1)

Lo de !place_free me sirvió, pero no soluciona mi duda, yo quiero saber por qué no salta D:
Estoy dando vueltas para poder solucionarlo, pero... no salgo del mismo circulo xD

si necesitas hacer solo un salto lo dejas así:

if keyboard_check_pressed(ord("W")) and !place_free(x,y+1)
              {vspeed=-10}

pero el personaje en el evento "step" debe tener una confirmacion de si debe tener gravedad o no, algo así:

//gravedad
if instance_place(x,y+1,obj_blq)
    {gravity=0}
     else
    {gravity=1
     gravity_direction=270}

Cita de: jefferson940 en Marzo 29, 2015, 01:16:55 AM
si necesitas hacer solo un salto lo dejas así:

if keyboard_check_pressed(ord("W")) and !place_free(x,y+1)
              {vspeed=-10}

pero el personaje en el evento "step" debe tener una confirmacion de si debe tener gravedad o no, algo así:

//gravedad
if instance_place(x,y+1,obj_blq)
    {gravity=0}
     else
    {gravity=1
     gravity_direction=270}
Bueno, la cosa es así, yo pongo eso pero mi jugador se va de la pantalla xD.

Y por la experiencia que tengo, creo que debería ser así esto:
if keyboard_check_pressed(ord("W")) and place_free(x,y+1)

Ya que yo no quiero saber si hay un lugar libre o no, simplemente quiero que se ejecute el comando si hay un lugar si o sí.

#5 Marzo 29, 2015, 07:09:32 AM Ultima modificación: Marzo 29, 2015, 07:11:28 AM por Kain88
Pero al usar place_free le estas indicando "si hay lugar libre debajo", osea el personaje te saltaria ya estando en el aire. Tenes que usar !place_free

El codigo completo es este:

//Todo en el event Step.
if keyboard_check(ord("A")) and place_free(x-1,y) and (x >0)
{x-=1;}
//se movera hacia la izquierda.

if keyboard_check(ord("D")) and place_free(x+1,y) and (x<room_width)
{x+=1;}
//Se movera hacia la derecha.

if keyboard_check(ord("W")) and !place_free(x,y+1)
{vspeed=-2;}
//salta, solo si esta sobre suelo solido.

if vspeed < 16 and place_free(x,y+1)
{gravity=0.5}else{gravity=0;}
//si esta en el aire cae con efecto de gravedad.

//en el event de collision contra el obj_Suelo o como le llames.
move_contact_solid(direction, vspeed) vspeed=0;


Ese es todo el codigo que necesitas. Recuerda marcar la casilla Solid en el object que usas de piso.
Atentamente.-
Elvis Kelley
Mi Manual.
Mi canal de Youtube Youtube click aqui
Video tutoriales Game maker

#7 Marzo 29, 2015, 06:08:39 PM Ultima modificación: Marzo 29, 2015, 06:12:21 PM por Alex_Wallace
Cita de: elviskelley en Marzo 29, 2015, 03:54:26 PM
El codigo completo es este:

//Todo en el event Step.
if keyboard_check(ord("A")) and place_free(x-1,y) and (x >0)
{x-=1;}
//se movera hacia la izquierda.

if keyboard_check(ord("D")) and place_free(x+1,y) and (x<room_width)
{x+=1;}
//Se movera hacia la derecha.

if keyboard_check(ord("W")) and !place_free(x,y+1)
{vspeed=-2;}
//salta, solo si esta sobre suelo solido.

if vspeed < 16 and place_free(x,y+1)
{gravity=0.5}else{gravity=0;}
//si esta en el aire cae con efecto de gravedad.

//en el event de collision contra el obj_Suelo o como le llames.
move_contact_solid(direction, vspeed) vspeed=0;


Ese es todo el codigo que necesitas. Recuerda marcar la casilla Solid en el object que usas de piso.

Muchas gracias!
Y también muchas gracias a los que intentaron ayudarme.

Ahora funciona bien, el único problema es que el piso es solido, pero cuando está sobre el piso cae en cámara lenta, como si fuese arena movediza xD
Pero ese problema tratare de resolverlo yo, ya que estoy pidiendo demasiada ayudar.

EDIT: Listo, ya solucione mi problema de que se cae cuando toca el suelo.
Hice un evento de colisión con el piso para poner la vspeed en 0.

si cae es por que no has colocado al piso solido, al piso colocale en el event create esto: solid=true;
Atentamente.-
Elvis Kelley
Mi Manual.
Mi canal de Youtube Youtube click aqui
Video tutoriales Game maker