Junio 06, 2012, 07:24:29 PM Ultima modificación: Junio 06, 2012, 07:49:30 PM por Battletoad
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

me da que hablas de la fricción... hay una acción en la pestaña move de eso
en http://krstudyos.blogspot.com solo hay basura... mejor que ni entres...

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

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
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


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.

 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 :)
   Metroid Gravity      -Trailer aqui-

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!

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 :)
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


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?.
:)

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)
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Eso era, no había calculado que nunca llegaba a 0 la velocidad. Ahora se queda quieto. Thanks again