Como podría hacer que mi personaje no se mueva en dirección horizontal o pudiera moverse solo un poquito mientras salta? He intentado varias veces, pero se queda flotando reproduciendo la animación de saltar mientras se mueve, en vez de estar reproduciendo la de caer.
La animación de caer solo se reproduce si salto, y no me muevo en horizontal.

PD: Soy nuevo.


Cita de: wast en Noviembre 11, 2018, 06:55:38 PM
Como podría hacer que mi personaje no se mueva en dirección horizontal o pudiera moverse solo un poquito mientras salta? He intentado varias veces, pero se queda flotando reproduciendo la animación de saltar mientras se mueve, en vez de estar reproduciendo la de caer.
La animación de caer solo se reproduce si salto, y no me muevo en horizontal.

PD: Soy nuevo.
Lo que pude entender es lo siguiente
1.- estas haciendo un juego plataforma estilo mario bros
2.- que cuando salta tu personaje se mueve como si caminara en el laire en ves de saltar
3.- hay falta de informacion como si el personaje tiene una animacion de salto separa con la de caida y de que variable estes usando para hacer lo de la gravedad gravity o el valor de .

Posible solución

una variable de salto la cual dice si el personaje esta en el aire o esta tocando el suelo
esa una variable boolean
y si utiliza gravity para crear la gravedad  cuando la vspeed sea mayor a 0 se considera que el personaje esta cayendo por lo tanto podría hacer una condición con vspeed o era hspeed :V me confunde esas dos haha

de toda manera es necesario que tu pase el codigo que utuliza o un gif por que una imagen no seria muy demostrativa

espero haberte ayudado.

PD: Bienvenido a la comunidad
PDD: Casi no entiendo nada de el punto planteado se mas especifico para la proxima.
PDDD:Que divertido es escribir posdata XD
:3 visita mi canal-cito de youtube :3

Hola, perdón por mi escasez de información. Mi Pj tiene 4 eventos:
Yo lo que quiero hacer es que se mueva poco mientras esta en el aire, no que se vaya deslizando. Y además que se reproduzca la animación de caída.

Sí estoy haciendo un juego de plataformas.

Create:

sprite_index = sprite2;
image_speed = 1;
image_index = 0;

x = 512;
y = 416;

v = 7;


EVENTO STEP:
if keyboard_check(vk_right){
   direction = 0;
   speed = v;
   

}
//Izquierda
if keyboard_check(vk_left){
   direction = 180;
   speed = v
   
}
//Animacion quieto
if speed = 0 {
   sprite_index = sprite2;

   

}
//Animacion corriendo der
if speed > 0 && direction = 0{
sprite_index = main_char_right;   
}
//Animacion corriendo izq
if speed > 0 && direction = 180{
sprite_index = main_char_left;   
}

//pararse
if keyboard_check_released(vk_right){
   sprite_index = sprite2;
   speed = 0;
   image_speed = 1;
   
}
//pararse
if keyboard_check_released(vk_left){
   sprite_index = sprite2;
   speed = 0;
   image_speed = 1;
}
//gravedad
if place_empty(x,y+1){
sprite_index = main_char_up;
gravity = 1;
}
else{
gravity = 0;
}

//saltar
if keyboard_check_pressed(vk_up) and not place_free(x, y + 1) {
vspeed -= 15;
}



//para que se reproduzca la animación de caer.
switch (vspeed){

case +15:
sprite_index = main_char_fall
break;

case +14:
sprite_index = main_char_fall
break;

case +13:
sprite_index = main_char_fall
break;

case +12:
sprite_index = main_char_fall
break;

case +11:
sprite_index = main_char_fall
break;

case +10:
sprite_index = main_char_fall
break;

case +9:
sprite_index = main_char_fall
break;

case +8:
sprite_index = main_char_fall
break;

case +7:
sprite_index = main_char_fall
break;

case +6:
sprite_index = main_char_fall
break;

case +5:
sprite_index = main_char_fall
break;

case +4:
sprite_index = main_char_fall
break;

case +3:
sprite_index = sprite2
break;

case +2:
sprite_index = sprite2
break;

case +1:
sprite_index = sprite2
break;


}


COLISION CON PARED
move_contact_solid(direction, 12);
vspeed = 0; 


ANIMATION END
if sprite_index = main_char_up{
   
   image_speed = 0;
   
   }




pd: Soy nuevo en este motor, y aún me estoy acostumbrando al gml, debido a que he programado yo mismo con mis actuales pésimos conocimientos, probablemente estén mal optimizados, pero funcionan




Pregunta: El sprite main_char_fall, ¿en qué momento debe estar? ¿cuando el personaje está saltando (yendo hacia arriba), cuando está cayendo (yendo hacia abajo), o ambas (basta con que se mueva verticalmente)?
alaberga regué el café.

BA:STFW&RTFM

El sprite main_char_fall, és la animación de cuando cae.
El sprite main_char_up és la animación de el personaje cuando salta.

El sprite main_char_fall tiene que estar cuando esta cayendo.

[user]NiuWeb[/user]

Primero que todo, me parece que tu código está bastante desorganizado en cuanto a la asignación de los sprites, vamos por ahí primero. La idea es simple; organizar el sprite que se asignará basándose en "casos" opuestos; véase, si está en el aire o no, si se mueve arriba o abajo, izquierda o derecha, etc.
[gml]
//Primer caso: ¿está en  el aire o no?
if place_empty(x, y + 1) {
    //Si está en el aire
    if vspeed < 0 { //Si la velocidad es negativa (o sea, si va pa'rriba)
        sprite_index = main_char_up;
    }
    else if vspeed > 3 { //Si la velocidad es positiva y mayor que tres (o sea, si va pa'bajo)
        sprite_index = main_char_fall;
    }
}
else {
    //Si no está en el aire
    if hspeed == 0 { //Si el player está quieto
        sprite_index = sprite2; //Sprite de quieto
    }
    else if hspeed > 0 { //Si va pa'la derecha
        sprite_index = main_char_right;
    }
    else { //Si va pa'la izquierda
        sprite_index = main_char_left;
    }
}
[/gml]

Ahora bien, si lo que quieres es que el personaje reduzca su velocidad horizontal mientras esté en el aire, basta con que modifiques el código así:
[gml]
var vv = v; //La velocidad horizontal (uso otra variable para no modificar el valor real de la velocidad)
if (sprite_index == main_char_up) or (sprite_index == main_char_fall) { //Si el personaje está en el aire
    vv = v/3; //La velocidad será un tercio de la original
}
if keyboard_check(vk_right) {
    hspeed = vv; //Es mejor que no uses 'speed' para evitar problemas con 'vspeed'.
    /*
    Tampoco vamos a usar 'direction'; es innecesaria en este caso y, de nuevo, podría
    dar problemas con 'vspeed'. En su lugar, es mejor ponerle signo negativo o positivo
    a la velocidad. Si es positiva va pa'la derecha, y si es negativa, pues pa'la izquierda
    */
}
//Izquierda
if keyboard_check(vk_left){
    hspeed = -vv; //Aquí se pone negativo porque va pa'la izquierda
}[/gml]

Y listo, debería funcionar.

PD: Ese código es todo lo que necesitas en step, puedes reemplazar lo que ya tienes por esto, a excepción obviamente del código que genera la caída, la gravedad y el salto (sin dejar nada relacionado a los sprites aparte del código que te puse arriba).
alaberga regué el café.

BA:STFW&RTFM

Peró el personaje sigue deslizandose de izquierda a derecha, quiero decir, prefereria que cayera más rápido.

[user]NiuWeb[/user]

Solo aumenta la gravedad y la velocidad de salto.
alaberga regué el café.

BA:STFW&RTFM

#9 Noviembre 14, 2018, 06:26:03 PM Ultima modificación: Noviembre 14, 2018, 10:46:54 PM por dixon2010
Hola gusto en saludarle.

Algo así?


Este es el nuevo código
[CREATE EVENT]
b2=0
s=0
d=1


[STEP EVENT]

//movimiento vertical con salto.
b2p=(b2=0)*keyboard_check(38)
b2=keyboard_check(38)
if(b2p*(s=0)*place_meeting(x,y+10,object1))s=25
if(s)s-=1+place_meeting(x,y-1,object1)*2
if(s<0)s=0
vs=10-s
while(place_meeting(x,y+vs,object1))vs-=1*sign(vs)
y+=vs

//movimiento horizontal
b1=keyboard_check(37)
b3=keyboard_check(39)
control=(b1+b3=1)
if(control)d=1-2*b1
v=control*d*(6-(6/1.5)*(vs!=0))
//COLISIÓN
while(place_meeting(x+v,y,object1))v-=1*sign(v)
x+=v

//imágenes
sprite_index=sprite2
if(!place_meeting(x,y+2,object1))
{
if(vs<0)sprite_index=main_char_up else sprite_index=main_char_fall
}
if(abs(v) && (vs=0))sprite_index=main_char_right

image_xscale=d


Y no tienes que usar el evento colisión.
Ojo el object1 debe ser reemplazado por el objeto piso o pared
Dios nos ayuda y nos da sabiduría para vivir. Cáda código es una obra maestra que hay que respetar aunque exista un código mas eficiente y sencillo.