Noticias

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

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: Como Hacer un Salto tipo Super Mario o Alex Kidd [Solucionado]  (Leído 723 veces)

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

Desconectado T789

Voy directo, he logrado hacer todos los movimientos y animaciones de mi personaje, pero me he dado cuenta que el salto es muy simple y que me gustaria uno mas parecido al de Mario

Ya saben que al saltar y oprimir la tecla Right y que al dejar de oprimirla el player valla cayendo y movimiendose poco a poco hacia la direccion de la ultima tecla, me seria util que alguien me explicara bien que es lo que tendria que hacer para lograr ese efecto
« última modificación: Mayo 19, 2020, 06:14:08 am por T789 »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado dixon

Respuesta #1 en: Diciembre 07, 2019, 12:30:08 am
Hola, buenas noches.

Aunque la respuesta parece sencilla,  los métodos aplicables son diversos y cada persona tiene su estilo. Por lo tanto producir un código que se acople a tu código será arduo aunque no lo he visto. Puedes mostrar tu código de movimiento horizontal y el código de movimiento vertical, quizás alguien pueda analizarlo e integrarle las funciones necesarias. Ahora bien, la otra alternativa es que alguien te ofrezca todo su sistema de movimiento completo y tendrás que desechar el anterior, eso es lo que intentaré hacer, no es difícil de entender.  Según lo que entiendo estas pidiendo que el personaje gradúe su altura de salto al igual que mario bros, y que se siga moviendo según la dirección de la ultima tecla pisada durante unos segundos. Entender este ultimo movimiento es el que nos va a permitir programar el polvo que mario levanta cuando cambia de dirección y también sirve para crear el efecto de camin ar sobre hielo, donde el personaje patina.

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.
 


Desconectado T789

Respuesta #2 en: Diciembre 07, 2019, 12:35:55 am
Bueno si es necesario un codigo, he aqui una captura del codigo, disculpa si es muy simple
« última modificación: Diciembre 07, 2019, 12:37:29 am por T789 »

 


Desconectado dixon

Respuesta #3 en: Diciembre 07, 2019, 01:15:35 am
Hola denuevo

Estoy tratando de darte la respuesta en vivo y directo, pero estoy recapitulando las plataformas.  El siguiente código es el que va en el objeto player, incluye colisiones y todo lo demás.

///EVENTO CREATE
Código: [Seleccionar]
//botones
b2=0
d=1 //direccion horizontal (1 es para derecha y -1 izquierda)
s=0 //salto

///EVENTO DRAW
Código: [Seleccionar]
///botones
b1=keyboard_check(37)
b2p=(b2=0)*keyboard_check(38)
b2r=(keyboard_check(38)=0)*b2
b2=keyboard_check(38)
b3=keyboard_check(39)
b4=keyboard_check(40)

///movimiento vertical
if(b2p && (s=0) && (place_empty(x,y+5)=0))s=25
if(s)s-=2
if(s<0)s=0
if(b2r)s=0

g=7.5-s
y+=g
while(!place_empty(x,y+2))y=floor(y)-1

///movimiento horizontal
caminar=(b1+b3=1)
if(caminar)d=1-2*(b1)
v=5*d
while(!place_empty(x+v,y-5))v-=sign(v)
x+=(caminar)*v

///dibujo
dy=0
texto=b2r
draw_text(0,dy,texto)
dy+=12

draw_sprite(sprite_index,image_index,x,y)

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.
 


Desconectado T789

Respuesta #4 en: Diciembre 07, 2019, 01:20:16 am
gracias por la ayuda

 


Desconectado dixon

Respuesta #5 en: Diciembre 07, 2019, 01:31:40 am
Estoy tratando de trabajar con tu código para no usar mi estilo. Me hacen falta las funciones que usas para darle gravedad al personaje. Pues se me quedó parado en el aire y no quiero usar codigo propio.


Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.
 


Desconectado T789

Respuesta #6 en: Diciembre 07, 2019, 01:56:12 am
la verdad mi codigo no es profesional pero si funciona para cosas basicas
Todos mis codigos son simples por causa de que apenas aprendo programacion, aun hay cosas de las variables que no entiendo

 


Desconectado dixon

Respuesta #7 en: Diciembre 07, 2019, 02:16:23 am
Su código es bastante bueno, y he notado en estos meses que su motivación es alta. Cuando logres comprender que con game maker se puede cambiar el mundo entonces usted será un buen maestro.

Se adjunta ejemplo para game maker 8 "VISIBLE PARA VISITANTES,,,  ¿VISITANTES????"


Esto es lo que tengo por ahora, tuve que hacerle modificaciones para hacerlo funcionar. Por ahora no se deslisa por el suelo pero he conseguido el salto. Para mañana continuamos tengo que apagar la PC. Claro que tambien tiene el código para caminar sobre plataformas inclinadas.

Este código va en un evento step o draw
Código: [Seleccionar]
///botones
if(keyboard_check(113))game_restart()

///movimiento horizontal
v=0

if keyboard_check(vk_right)
{
v= 3
sprite_index = spr_alex_run
image_speed = 0.2
image_xcale = 1
}
if keyboard_check(vk_left)
{
v=-3
sprite_index = spr_alex_run
image_speed = 0.2
image_xscale = -1
}

//colisión horizontal
while(!place_empty(x+v,y-5))v-=sign(v)
x+=v

///movimiento verlical
y+=10 //esto sirve de gravedad

while(!place_empty(x,y+1))y-=1

if keyboard_check_pressed(vk_space)
{
if not place_empty(x,y+2)
vspeed = -25
}

//este código es para controlar la velocidad vertical
if (vspeed<0) vspeed+=1
if (vspeed>-1 && vspeed<1)vspeed=0
if(keyboard_check_released(vk_space))vspeed=0

///colision vertical
while(!place_empty(x,y+vspeed))vspeed=0

///dibujo
dy=0
texto=vspeed
draw_text(0,dy,texto)
dy+=20

draw_sprite(sprite_index,image_index,x,y)
« última modificación: Diciembre 07, 2019, 02:24:15 am por dixon »

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.
 


Desconectado T789

Respuesta #8 en: Diciembre 07, 2019, 02:20:29 am
disculpa tengo una duda
keyboard_check(113) no entiendo que expresan esos numeros en el keyboard_check y esta muy bueno tu codigo pero prefiero aprender a hacer el mio propio, prefiero hacer mis propios codigos para el aprendizaje
« última modificación: Diciembre 07, 2019, 02:22:14 am por T789 »

 


Desconectado dixon

Respuesta #9 en: Diciembre 07, 2019, 04:54:45 pm
Hola, buenos días

if(Keyboard_check(113))game_restart() /// esto quiere decir que cuando se presione la tecla 113 (F2) debe reiniciarse el juego. Si tienes otra duda me avisas, se puede crear otro código mas entendible.

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.
 


Desconectado T789

Respuesta #10 en: Diciembre 07, 2019, 05:03:59 pm
ah ya no sabia esas referencias para las teclas comunes, las conozco mejor por como las tiene GM
como ejemplo vk_12

 


Desconectado dixon

Respuesta #11 en: Diciembre 09, 2019, 07:05:55 pm
Hola,

Disculpa que no te había respondido. Aquí esta el movimiento y el salto indicado.
Adjunto Ejemplo para game maker 8
plataforma.gmk(27.83 kB )

//create
v=0 //velocidad, esta si es menor que cero entonces el personaje se mueve a la isquierda y si es mayor que cero el personaje se mueve a la dercha
d=1// esta es la direccion, 1 derecha y -1 izquierda

//step
///botones
if(keyboard_check(vk_f2))game_restart()

///movimiento horizontal
if(abs(v))v-=sign(v)*0.5
if(abs(v)>6)v=sign(v)*6

if keyboard_check(vk_right)
{
v+=1
d=1
image_xscale = 1
}
if keyboard_check(vk_left)
{
v-=1
d=-1
image_xscale = -1
}

//colisión horizontal

while(!place_empty(x+(v)*2,y-5) && abs(v)){v-=sign(v)}
x+=v


///movimiento verlical
y+=10 //esto sirve de gravedad
while(!place_empty(x,y+1))y-=1 //para que no traspase el suelo, esto es la colisión con el suelo

if keyboard_check_pressed(vk_space)
{
if not place_empty(x,y+2)
vspeed = -25
}

//modificando el sprite
image_speed=0.5
if(place_empty(x,y+2)) ///si esta en el aire el sprite es jump
{
sprite_index = spr_alex_jump ///agregando sprite de salto
}
else //si está en el suelo
{
sprite_index = spr_alex_run

if(abs(v)) //si hay velocidad la imagen se adaptará a la direccion de la velocidad
 {
 image_xscale=sign(v)
 }
 else //si no hay velocidad la imagen no tendrá secuencia
 {
 image_speed=0
 }
 
}
//este código es para controlar la velocidad vertical
if (vspeed<0) vspeed+=1
if (vspeed>-1 && vspeed<1)vspeed=0
if(keyboard_check_released(vk_space))vspeed=0

///colision vertical
if(!place_empty(x,y+vspeed)){vspeed=0;y+=1}

« última modificación: Diciembre 09, 2019, 07:12:09 pm por dixon »

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.
 


Desconectado T789

Respuesta #12 en: Diciembre 09, 2019, 07:09:49 pm
Este es un poco mas entendible
aunque en vez de utilizar image_xscale, uso una variable: escala

igual gracias veo le hiciste mejoras a mi codigo