Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: rick136 en Abril 29, 2019, 04:32:49 AM

Título: Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: rick136 en Abril 29, 2019, 04:32:49 AM
Hola saludos a todos, les cuento que estaba desarrollando un videojuego en RPG maker pero me limitaba en algunas ideas que tengo para mi proyecto así que decidí pasarme al game maker (aun sabiendo muy poco sobre como usarlo, porque soy masoquista supongo) y me he encontrado la primer piedra, nada mas al inicio...

he estado viendo varios sistemas de movimiento pero ninguno me convence del todo porque da errores (tipo que el personaje haga el "moonwalker" o se vuelva medio loco si aprietas izquierda y derecha a la vez, por ejemplo) y los que si se veían mas pulidos, me da error a la hora de escribir algunos códigos (no se si sera por la versión, uso la 1.4).

así que les agradecería si me pudieran dar ideas de como hacer o me pasaran sistemas de movimiento en 4 direcciones, si es en código, también agradecería que me explicaran el funcionamiento ya que como digo soy muy novato aun con este motor. gracias desde ya!
Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: 3dgeminis en Mayo 01, 2019, 10:06:40 PM
[gml]
///CREATE
velocidad=4
mover_vertical=true
mover_horizontal=true
[/gml]
[gml]
///STEP
///esta primera parte previene que se mueva en diagonal y no mezclar ambos ejes
if keyboard_check_pressed(vk_right) or keyboard_check_pressed(vk_left)
   {
    mover_horizontal=true
    mover_vertical=false
   }
if keyboard_check_pressed(vk_down) or keyboard_check_pressed(vk_up)
   {
    mover_horizontal=false
    mover_vertical=true
   }
 
///esta parte para evitar que el jugador se detenga cuando se presiona, por ejm., derecha e izquierda al mismo tiempo
if keyboard_check_pressed(vk_right) {keyboard_clear(vk_left)}
if keyboard_check_pressed(vk_left) {keyboard_clear(vk_right)}
if keyboard_check_pressed(vk_down) {keyboard_clear(vk_up)}
if keyboard_check_pressed(vk_up) {keyboard_clear(vk_down)}

///aqui solo se mueve; por ejm si se presiona derecha solo se movera si no se esta presionando arriba o abajo
if keyboard_check(vk_right) {x+=mover_horizontal*velocidad}
if keyboard_check(vk_left)  {x-=mover_horizontal*velocidad}
if keyboard_check(vk_down)  {y+=mover_vertical*velocidad}
if keyboard_check(vk_up)    {y-=mover_vertical*velocidad}
[/gml]
Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: somnus en Mayo 01, 2019, 10:28:45 PM
Cita de: 3dgeminis en Mayo 01, 2019, 10:06:40 PM
[gml]


///aqui solo se mueve; por ejm si se presiona derecha solo se movera si no se esta presionando arriba o abajo
if keyboard_check(vk_right) {x+=mover_horizontal*velocidad}
if keyboard_check(vk_left)  {x-=mover_horizontal*velocidad}
if keyboard_check(vk_down)  {y+=mover_vertical*velocidad}
if keyboard_check(vk_up)    {y-=mover_vertical*velocidad}
[/gml]

en esa ultima parte del codigo, es inecesario multiplicar por la velocidad, ya que si las variables "mover_..." son true, GML las interpreta como 1, por lo tanto, la multiplicacion esta hacienda un proceso que no se necesita pues el valor siempre sera la velocidad.


siguiendo con las respuestas hay muchas maneras de hacer las cosas, inclusive para mover solo en una direccion a la vez puedes utilizar if-else anidados o estructura switch, por ejemplo:

//usando IF
if(move_up){ y-=3;}
else if( move_down){y+=3;}
else if( move_left){x-=3;}
else if( move_right){x+=3}

//usando switch

switch(move_direction)
{
case 1:
x-=3;
break;
case 2:
x+=3;
break;
case 3:
y-=3;
break;
case 4:
4+=3;
break;
}


Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: 3dgeminis en Mayo 02, 2019, 02:54:13 AM
Si es necesario, ya que si no se multiplica el jugador puede moverse en diagonal, que es lo que se quiere evitar.
Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: somnus en Mayo 02, 2019, 11:53:37 PM
Cita de: 3dgeminis en Mayo 02, 2019, 02:54:13 AM
Si es necesario, ya que si no se multiplica el jugador puede moverse en diagonal, que es lo que se quiere evitar.

la multiplicacion? como, solamente si la condicion es verdadera se mueve el personaje segun la cordenada X e Y, en que momento si no se multiplica se mueve en diagonal?
Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: 3dgeminis en Mayo 03, 2019, 04:53:49 PM
Trata de hacerlo sin usar mover_horizontal y mover_vertical y veras que se puede mover en diagonal.
Si la ultima tecla presionada es arriba o abajo se deshabilita el eje horizontal evitando que se puedan mover en ambos ejes al mismo tiempo.
Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: rick136 en Mayo 04, 2019, 08:04:19 PM
Cita de: 3dgeminis en Mayo 01, 2019, 10:06:40 PM
[gml]
///CREATE
velocidad=4
mover_vertical=true
mover_horizontal=true
[/gml]
[gml]
///STEP
///esta primera parte previene que se mueva en diagonal y no mezclar ambos ejes
if keyboard_check_pressed(vk_right) or keyboard_check_pressed(vk_left)
   {
    mover_horizontal=true
    mover_vertical=false
   }
if keyboard_check_pressed(vk_down) or keyboard_check_pressed(vk_up)
   {
    mover_horizontal=false
    mover_vertical=true
   }
 
///esta parte para evitar que el jugador se detenga cuando se presiona, por ejm., derecha e izquierda al mismo tiempo
if keyboard_check_pressed(vk_right) {keyboard_clear(vk_left)}
if keyboard_check_pressed(vk_left) {keyboard_clear(vk_right)}
if keyboard_check_pressed(vk_down) {keyboard_clear(vk_up)}
if keyboard_check_pressed(vk_up) {keyboard_clear(vk_down)}

///aqui solo se mueve; por ejm si se presiona derecha solo se movera si no se esta presionando arriba o abajo
if keyboard_check(vk_right) {x+=mover_horizontal*velocidad}
if keyboard_check(vk_left)  {x-=mover_horizontal*velocidad}
if keyboard_check(vk_down)  {y+=mover_vertical*velocidad}
if keyboard_check(vk_up)    {y-=mover_vertical*velocidad}
[/gml]

mil gracias!! estoy aprendiendo gml de a poco  :)
Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: Bangaran en Septiembre 04, 2019, 02:14:07 AM
Cita de: 3dgeminis en Mayo 01, 2019, 10:06:40 PM
[gml]
///CREATE
velocidad=4
mover_vertical=true
mover_horizontal=true
[/gml]
[gml]
///STEP
///esta primera parte previene que se mueva en diagonal y no mezclar ambos ejes
if keyboard_check_pressed(vk_right) or keyboard_check_pressed(vk_left)
   {
    mover_horizontal=true
    mover_vertical=false
   }
if keyboard_check_pressed(vk_down) or keyboard_check_pressed(vk_up)
   {
    mover_horizontal=false
    mover_vertical=true
   }
 
///esta parte para evitar que el jugador se detenga cuando se presiona, por ejm., derecha e izquierda al mismo tiempo
if keyboard_check_pressed(vk_right) {keyboard_clear(vk_left)}
if keyboard_check_pressed(vk_left) {keyboard_clear(vk_right)}
if keyboard_check_pressed(vk_down) {keyboard_clear(vk_up)}
if keyboard_check_pressed(vk_up) {keyboard_clear(vk_down)}

///aqui solo se mueve; por ejm si se presiona derecha solo se movera si no se esta presionando arriba o abajo
if keyboard_check(vk_right) {x+=mover_horizontal*velocidad}
if keyboard_check(vk_left)  {x-=mover_horizontal*velocidad}
if keyboard_check(vk_down)  {y+=mover_vertical*velocidad}
if keyboard_check(vk_up)    {y-=mover_vertical*velocidad}
[/gml]

Hola disculpen se que este tema lo dejaron hace tiempo pero al igual que rick136 soy nuevo y quisiera saber si el sistema de 3dgeminis se puede usar en una maquina de estados)))
Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: 3dgeminis en Septiembre 04, 2019, 02:42:07 AM
Si sabes como hacer una maquina de estados lo puedes, se puede usar sin problemas.
Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: Bangaran en Septiembre 04, 2019, 04:46:50 AM
Cita de: 3dgeminis en Septiembre 04, 2019, 02:42:07 AM
Si sabes como hacer una maquina de estados lo puedes, se puede usar sin problemas.
si tengo una maquina de estados pero con mi codigo de movimiento se mueve en todas direcciones si me pudieras dar una idea de como modificar mi codigo de movimiento
vh = (-keyboard_check(vk_left) + keyboard_check(vk_right)) * v;
vv = (-keyboard_check(vk_up) + keyboard_check(vk_down)) * v;

de verdad me funciona muy bn solo que quiero q mi rpg se mueva en 4 direcciones
Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: 3dgeminis en Septiembre 06, 2019, 12:30:12 AM
Una forma de hacerlo:
[gml]
///CREATE
vel=4
direccion=0 ///0=derecha ; 1=izquierda ; 2=abajo ; 3=arriba

///STEP
if keyboard_check_pressed(vk_right) {direccion=0}
if keyboard_check_pressed(vk_left)  {direccion=1}
if keyboard_check_pressed(vk_down)  {direccion=2}
if keyboard_check_pressed(vk_up)    {direccion=3}

switch(direccion)
  {
   case 0: if keyboard_check(vk_right) {x+=vel} break;
   case 1: if keyboard_check(vk_left)  {x-=vel} break;
   case 2: if keyboard_check(vk_down)  {y+=vel} break;
   case 3: if keyboard_check(vk_up)    {y-=vel} break;
  }
[/gml]
Título: Re:Mejor sistema de movimiento en 4 direcciones? "action" rpg
Publicado por: somnus en Septiembre 09, 2019, 06:09:11 PM
asumo que se esta hablando meramente sobre una plataforma de PC, sin embargo al codigo anterior le falta algun soporte para gamepads que es algo diferente, aunque sigue la misma logica, nada mas para que lo contemplen, pues se habla en mayor manera de control en 4 direcciones, por tanto se aplica para gamepads.