Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Battletoad en Junio 06, 2012, 07:24:29 PM

Título: Pequeña inercia en juego plataformas
Publicado por: Battletoad en Junio 06, 2012, 07:24:29 PM
Antes de nada saludar a toda la comunidad en mi primer mensaje en el foro.
Hace poco que comencé mi primer juego en game maker, un sencillo plataformas que estoy haciendo con todo mi cariño ;-) y que prometo mostrar cuando lo termine. Voy siguiendo tutoriales y más o menos me voy arreglando, pero tengo varias dudas.
Me gustaría que el personaje tuviera un poco de inercia cuando suelto las teclas de movimiento. Imagino que habría que asignar alguna orden a los key release izqda y derecha, pero no doy con ello. El movimiento a izquierda y derecha lo hago con comandos jump to position.
Muchas gracias adelantadas y un saludo
Título: Re:Pequeña inercia en juego plataformas
Publicado por: SobacoEnLlamas en Junio 06, 2012, 07:29:03 PM
me da que hablas de la fricción... hay una acción en la pestaña move de eso
Título: Re:Pequeña inercia en juego plataformas
Publicado por: Battletoad en Junio 06, 2012, 07:43:33 PM
Lo que pasa es que la fricción afecta al horizontal speed, y yo en el movimiento no establezco horizontal speed porque lo hago mediante jump to position. ¿Mejor cambiar el sistema de movimiento por el de move fixed?
Soy totalmente novato en esto...
Título: Re:Pequeña inercia en juego plataformas
Publicado por: Mgbu en Junio 06, 2012, 08:41:16 PM
Puede ser, pero podés hacerlo con "jump to position"
No lo probé, pero si declaras una variable velocidad, que mientras presionas derecha o izquierda sea 4, y que al soltar vaya disminuyendo, podrías hacer esto:

En step
CitarSi dirección=derecha
jump to position x=velocidad y=0 (con relative)
Si dirección=izquierda
jump to position x=-velocidad y=0 (con relative)
Con execute a piece of code pones:
if keyboard_check(vk_right)=false and keyboard_check(vk_left)=false
{
if velocidad>0 velocidad-=0.2
if velocidad<0 velocidad=0
}

Ese código significa que si no estás apretando la flecha derecha o izquierda, disminuya la velocidad si esta es mayor a 0, y para prevenir errores si la velocidad es menor a 0 la velocidad sea 0

Al presionar derecha (por ejemplo)
CitarDireccion=derecha
Velocidad=4
Título: Re:Pequeña inercia en juego plataformas
Publicado por: MaanuRP en Junio 06, 2012, 08:46:13 PM
El cambio que quieres hacer es bastante amplio.
Debes de crear una variable auxiliar para el movimiento, si es que lo quieres seguir haciendo con "Jump to position".
Esta variable debera sumarse gradualmente cuando presiones la tecla de movimiento, y restarse cuando no este ninguno de esos botones presionado.
Cuando ya tengas esta variable, debes hacer que se le sume/reste al x de tu jugador.
Título: Re:Pequeña inercia en juego plataformas
Publicado por: FrogGer en Junio 06, 2012, 08:55:50 PM
 El sistema que usas (jump to position) es un buen método de movimiento y mejor que usar hspeed, pero si lo que quieres es tener aceleramiento y/o friccion ya no te sirven los tutoriales básicos de plataformas, necesitas código más rebuscado.
   Dices que eres muy novato en esto, y te podrías complicar bastante. Es muy necesario que tu juego tenga fricción? 
   Te dejo 2 ejemplos de la comunidad oficial, ambos usan friccion y aceleracion en el personaje. Puedes echarle un vistazo para que te ideas :)
Título: Re:Pequeña inercia en juego plataformas
Publicado por: Battletoad en Junio 07, 2012, 12:15:24 AM
Ya lo tengo, he seguido las indicaciones de Mgbu y va de fábula. He usado la misma fórmula para la aceleración y va muy bien, aunque mantiene la velocidad "ya acelerada" si cambio de dirección. A ver si doy con ello y lo soluciono.
Gracias!
Título: Re:Pequeña inercia en juego plataformas
Publicado por: Mgbu en Junio 07, 2012, 12:44:01 AM
Ah si! eso se puede arreglar haciendo que una velocidad negativa sea a la izquierda y una positiva hacia la derecha

Entonces al apretar derecha sumas 0.4 a velocidad, al apretar izquierda restas 0.4
Al no apretar nada te acercas al 0 con 0.2 así que
if velocidad<0 velocidad+=0.2
if velocidad>0 velocidad-=0.2
if velocidad=0 velocidad=0

Y en step también agregas
jump to position x=velocidad y=0 (con relative)


Esa es la idea :)
Título: Re:Pequeña inercia en juego plataformas
Publicado por: Battletoad en Junio 07, 2012, 12:42:06 PM
Perfecto! Son mis primeras incursiones con la redacción de código, pero voy comprendiendo poco a poco.
Ya me acelera ligeramente y tiene la inercia, he tenido que jugar con los valores para hacerlo jugable a mi gusto.
Pero seguimos con los problemas  :-\... Ahora al dejarlo parado tiende a moverse despacito hacia la izquierda. He repasado todos los comandos y debería tener la velocidad a 0... ¿Alguna idea?.
:)
Título: Re:Pequeña inercia en juego plataformas
Publicado por: Mgbu en Junio 07, 2012, 06:49:42 PM
Se me ocurre que la velocidad puede estar siendo 0.1, así:

velocidad es 0.1
if velocidad>0 velocidad-=0.2
velocidad queda -0.1
if velocidad<0 velocidad+=0.2
velocidad queda 0.1 de nuevo

Probá cambiar "if velocidad=0 velocidad=0" por "if velocidad<0.2 and velocidad>-0.2 velocidad=0"
Significa: "Si la velocidad es menor a 0,2 y mayor a -0,2 hacer que la velocidad sea 0

Si no funciona adjuntanos el editable (en opciones adicionales abajo cuando redactas un mensaje)
Título: Re:Pequeña inercia en juego plataformas
Publicado por: Battletoad en Junio 07, 2012, 09:28:36 PM
Eso era, no había calculado que nunca llegaba a 0 la velocidad. Ahora se queda quieto. Thanks again