Noticias

¡Ayuda a la Comunidad GM, haz una donación!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Personaje estático mientras esta en el aire.  (Leído 1010 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 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.

 
Los siguientes usuarios dieron las gracias a este tema: dixon2010


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado bygdle

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2848
  • Mensajes: 1.715
  • Agradecido: 152 veces
  • Sexo: Masculino
  • Thomas the dank engine.
    • Ver Perfil
Respuesta #1 en: Noviembre 11, 2018, 07:13:49 pm

alaberga regué el café.

BA:STFW&RTFM
 


Desconectado elmmertonw

  • Habitual
  • *
  • Puntos: 81
  • Mensajes: 52
  • Agradecido: 6 veces
  • Sexo: Masculino
  • I'm brony :D Compositor,Artista,Programador...
    • Ver Perfil
    • Mi pequeño canal para aprender a programar
Respuesta #2 en: Noviembre 12, 2018, 02:36:21 am
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
 


Desconectado wast

Respuesta #3 en: Noviembre 12, 2018, 03:58:51 pm
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:

Código: [Seleccionar]
sprite_index = sprite2;
image_speed = 1;
image_index = 0;

x = 512;
y = 416;

v = 7;

EVENTO STEP:
Código: [Seleccionar]
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
Código: [Seleccionar]
move_contact_solid(direction, 12);
vspeed = 0; 

ANIMATION END
Código: [Seleccionar]
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



 


Desconectado bygdle

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2848
  • Mensajes: 1.715
  • Agradecido: 152 veces
  • Sexo: Masculino
  • Thomas the dank engine.
    • Ver Perfil
Respuesta #4 en: Noviembre 12, 2018, 09:02:37 pm

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
 


Desconectado wast

Respuesta #5 en: Noviembre 12, 2018, 09:45:49 pm
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.

NiuWeb

 


Desconectado bygdle

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2848
  • Mensajes: 1.715
  • Agradecido: 152 veces
  • Sexo: Masculino
  • Thomas the dank engine.
    • Ver Perfil
Respuesta #6 en: Noviembre 12, 2018, 10:14:25 pm
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.
//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;
    }
}

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í:
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
}

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
 
Los siguientes usuarios dieron las gracias a este tema: wast


Desconectado wast

Respuesta #7 en: Noviembre 13, 2018, 09:46:11 pm
Peró el personaje sigue deslizandose de izquierda a derecha, quiero decir, prefereria que cayera más rápido.

NiuWeb

 


Desconectado bygdle

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2848
  • Mensajes: 1.715
  • Agradecido: 152 veces
  • Sexo: Masculino
  • Thomas the dank engine.
    • Ver Perfil
Respuesta #8 en: Noviembre 13, 2018, 09:49:56 pm
Solo aumenta la gravedad y la velocidad de salto.

alaberga regué el café.

BA:STFW&RTFM
 


Desconectado dixon2010

Respuesta #9 en: Noviembre 14, 2018, 06:26:03 pm
Hola gusto en saludarle.

Algo así?
[youtube]http://www.youtube.com/watch?v=q2o1iogA3aY[/youtube]

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

[STEP EVENT]
Código: [Seleccionar]
//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
« Última modificación: Noviembre 14, 2018, 10:46:54 pm por dixon2010 »

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.
 


 


Warning: Parameter 1 to spoiler_buffer() expected to be a reference, value given in Unknown on line 0

Warning: Parameter 1 to custom_report_ob() expected to be a reference, value given in Unknown on line 0