como no moverse en diagonal

Publicado por TomasYSara, Marzo 01, 2020, 04:48:54 PM

Tema anterior - Siguiente tema

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

TomasYSara

hola amigos, puse el icono rojo porque es el que mas se parece xd
estoy haciendo un rpg y tengo el problema de que mi personaje se mueve en diagonal cuando presiono dos teclas por ejemplo arriba y derecha osino de otra forma, abajo y derecha en direcciones de diagonal, mi pregunta es como hacer para no mover en diagonal, que solamente se mueva en x o en 
el codigo que uso es este, si necesitan mas datos me dicen
[gml]/gml]
if (estado != ATACANDO){//si no está atacando, moverse

   if (keyboard_check(vk_left)){ //si se presiona la tecla izquierda
      if place_free(x-vel,y) // y hay espacio libre
         x -= vel; // mover a la izquierda
      dir = IZQUIERDA; //establecer la variable dir para cambiar la animasion
      estado = CAMINANDO; // establecer estado para poner la animasion a 0.5 de velocidad
   }
   
   if (keyboard_check(vk_right)){
      if place_free(x+vel,y)
         x += vel;
      dir = DERECHA;
      estado = CAMINANDO;
   }
   
   if (keyboard_check(vk_down)){
      if place_free(x,y+vel)
         y += vel;
      dir = ABAJO;
      estado = CAMINANDO;
   }
   
   if (keyboard_check(vk_up)){
      if place_free(x,y-vel)
         y -= vel;
      dir = ARRIBA;
      estado = CAMINANDO;
   }
   
   if (!keyboard_check(vk_right) && !keyboard_check(vk_left) && !keyboard_check(vk_down) && !keyboard_check(vk_up)){
      estado = PARADO;
   }
}

FernandoNavarro

#1
Hola Tomás.

Te recomiednprecurrir a dos variables auxiiares, puedes llamarlas como intMoveX, intMoveY, declarándolas a cero en el evento create. Luego en el evento step te recomiendo crear variables locales para manipular las pulsaciones, al menos yo lo hago así, me resulta más práctico. Es algo así:

Create
[spoiler]
[gml]
intMoveX = 0;
intMoveY = 0;
[/gml]
[/spoiler]

Step
[spoiler]
[gml]
var keyLeft, keyRight, keyUp, keyDown;
keyLeft = -keyboard_check(vk_left);
keyRight = keyboard_check(vk_right);
keyUp = -keyboard_check(vk_up);
keyDown = keyboard_check(vk_down);

if (intMoveY == 0) intMoveX = keyLeft + keyRight;
if (intMoveX == 0) intMoveY = key+ keyDown;

//Cambio de dirección
if (intMoveX < 0)
{
    dir = "IZQUIERDA";
}

if (intMoveX > 0)
{
    dir = "DERECHA";
}

if (intMoveY < 0)
{
    dir = "ARRIBA";
}

if (intMoveY > 0)
{
    dir = "ABAJO";
}

//Movimiento
if (estado != ATACANDO)
{
    if (intMoveX != 0) && (place_free(x - vel * intMoveX, y))
    {
        x += vel * intMoveX;
        estado = CAMINANDO;
    }

    if (intMoveY != 0) && (place_free(x, y - vel * intMoveY))
    {
        y += vel * intMoveY;
        estado = CAMINANDO;
    }
}

if (intMoveX == 0 && intMoveY == 0) estado = "PARADO"
[/gml]
[/spoiler]

TomasYSara

gracias amigo, ayer tu mensaje estaba incompleto parese que se habia borrado pero llegue a la misma conclusion  usando otras variables con diferente nombre pero tenian la misma logica
lo que si aprendi de nuevo es eso de guardar las teclas en variables ahorra mucho codigo jaja 8) gracias

Powered by EzPortal
SMF spam blocked by CleanTalk