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: movimiento cuadricula con movimiento listo  (Leído 478 veces)

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

Desconectado Bangaran

  • Habitual
  • *
  • Puntos: 33
  • Mensajes: 16
  • Sexo: Masculino
    • Ver Perfil
en: Agosto 31, 2020, 05:21:45 am
Hola compañeros

tengo ya un sistema de maquina de estados para moverme
en cuatro direcciones pero necesito que se mueva el personaje
en cuadricula 32x32 pero no logro hacerlo con los videos de
youtube

alguien podria por favor ayudarme a hacerlo pero con el codigo que ya tengo????

 :GMS: :GMS: :GMS: :GMS:
EVENTO CREATE
///inicializacion
image_speed = 0;

enum ep{
    parado = scr_playerParado,
    caminando = scr_playerCaminando
}

dir = "abajo";          //direccion por defecto
estado = ep.parado;      //estado por defecto

 :GMS: :GMS: :GMS: :GMS:
EVENTO STEP
///captura movimiento por pantalla
vh = (-keyboard_check(vk_left) + keyboard_check(vk_right)) * v;
vv = (-keyboard_check(vk_up) + keyboard_check(vk_down)) * v;
//moverse en 4 direcciones
if (abs(vh) > 0)
{
    vv = 0;
}
else if (abs(vv) > 0)
{
    vh = 0;  
}

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Clamud

Respuesta #1 en: Septiembre 01, 2020, 04:47:39 pm
Hola. Agrega una condición (if) para que solo cambie su forma de movimiento cuando está alineado a la cuadríacula
//Step
///captura movimiento
if ((x mod 32) == 0 and (y mod 32) == 0) //si alineado a cuadricula
{
    vh = (-keyboard_check(vk_left) + keyboard_check(vk_right)) * v;
    vv = (-keyboard_check(vk_up) + keyboard_check(vk_down)) * v;
    //moverse en 4 direcciones
    if (abs(vh) > 0)
    {
        vv = 0;
    }
    else if (abs(vv) > 0)
    {
        vh = 0;  
    }
}
x += vh;
y += vv;
La variable v tiene que ser un divisor de 32, por ejemplo 2 o 4, si no, nunca se alineará perfectamente a la cuadrícula.
En el código se considera que los sprites tienen el origen en la esquina superior izquierda. Si el origen está centrado, puedes usar draw_sprite agregando el offset, o poner el objeto centrado y restar el offset al comprobar si está alineado.

Código de ejemplo en GMLive

 


Desconectado Bangaran

  • Habitual
  • *
  • Puntos: 33
  • Mensajes: 16
  • Sexo: Masculino
    • Ver Perfil
Respuesta #2 en: Septiembre 08, 2020, 08:52:33 pm
Trate de hacerlo y no me salio
no se si es por que lo hago en GM1

lo copie igual como sale en GMLive

pero no se si hago algo mal

 


Desconectado T789

Respuesta #3 en: Septiembre 08, 2020, 09:36:35 pm
Podrias hacerlo con la funcion de place_snaped(), que sirve para verificar si el objeto esta alineado 32×32 pixeles
if place_snapped(32, 32) {
  vh = (-keyboard_check(vk_left) + keyboard_check(vk_right))*vel;
  vv = (-keyboard_chech(vk_up) + keyboard_check(vk_down))*vel;

  //Moverse en 4 direcciones
  if (abs(vh) > 0)
      vv = 0;
      else if (abs(vv) > 0)
      vh = 0;
}
x += vh;
y += vv;
Solo si el objeto esta alineado a la cuadricula de 32 pixeles, podra captarse el movimiento, sino pues simplemente se le sumara hasta llegar a una nueva posicion libre

Sugiero que para evitar errores, te asegures que el objeto ya inicie colocado en una posicion de 32×32, puedes hacerlo por medio del room editor o... En el evento create con la funcion:
// Si no esta alineado a una cuadricula
if !place_snapped(32, 32)
   move_snap(32, 32) // Se alineara automaticamente
Si despues de hacer lo anterior, te sigue dando algun error al moverte, entonces debe haber alguna parte mal en tu codigo

Sugerencias:
-Hacer que el sprite sea de un tamaño adecuado de 32×32
-Poner tu vel, a un valor de 2 o 4 para evitar un incomveniente (no recomendable usar un 3 o 5)
-Asegurar que tus colisiones sean de 32×32 con un place_meeting

 


Desconectado Bangaran

  • Habitual
  • *
  • Puntos: 33
  • Mensajes: 16
  • Sexo: Masculino
    • Ver Perfil
Respuesta #4 en: Septiembre 08, 2020, 11:48:03 pm
No me resulto amigo

intente hacerlo igual y solo se alinea pero no se mueve mas

no se si hago algo mal!!
no soy experto por si acaso

 


Desconectado T789

Respuesta #5 en: Septiembre 09, 2020, 12:16:22 am
Nadie es experto en esto, siempre hay un error por si acaso  :-X

Prueba cambiando "vh" y "vv" por "hspeed" y "vspeed", y quita el "x+=" y el "y+="

¿Por casualidad tu vel tiene un valor? Y prueba poniendo los puntos de anclaje a 0,0