Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Temas - Fashion_Trozos

21
He intentado seguir los pasos del los tutoriales de Hektor Profe (Youtube), y mas o menos me voy defendiendo y aclarando, poco a poco. En este ultimo, el de la maquina de estados para un juego RPG, no consigo que pase de estado caminando a parado. Cuando para al personaje se queda a image_speed = 0, pero no se queda con el image_index = 0. Otra cosa que tampoco me funciona es el tema de saltar el primer frame de la animación (en el cual coloco la imagen parada del personaje). No se que estoy haciendo mal, realmente he copiado el código directamente. Muchas gracias y un saludo!

Evento Create
[gml]
image_speed = 0

   enum ej {
     parado = prota_parado,
     caminando = prota_caminando
      }
    
     dir = "abajo";
     estado = ej.parado;

[/gml]

Evento Step
[gml]
//Variables
v  = 5;
vh = 0;
vv = 0;

//Deteccion de direccion
vh = (-keyboard_check(vk_left) + keyboard_check(vk_right)) * v;
vv = (-keyboard_check(vk_up) + keyboard_check(vk_down)) * v;


//Colision horizontal
if place_meeting(x+vh,y,obj_cartel) //esta es la colision normal
{ repeat(v)//Este es un bucle "repeat"
   {  if !place_meeting(x+sign(vh),y,obj_cartel)// "if !" quiere decir lo contrario
      { x += sign(vh); }
      else
      {break;}
      
               }
         vh = 0 }
      
//Colision vertical      
if place_meeting(x,y+vv,obj_cartel)
{ repeat(v)
   { if !place_meeting(x,y+sign(vv),obj_cartel)
      { y += sign(vv); }
      else
      { break; }
                }
          vv = 0 }


//Detección de dirección
if (vv<0)      dir = "arriba";
else if (vv>0) dir = "abajo";
else if (vh<0) dir = "izquierda";
else if (vh>0) dir = "derecha";


//Detección de estado
if (dir != "") estado = ej.caminando;
if (vv == 0 and vh == 0) estado = ej.parado;

x += vh //si esto lo colocamos justo despues de la deteccion de movimiento
//la colision no funciona
y += vv

script_execute(estado)
[/gml]

Y estos serian los dos scripts

prota_parado

image_speed = 0;
iamge_index = 0;

prota_caminando
[gml]
image_speed = 1
if (image_index == 0) image_index++;


switch (dir) {
   case "abajo":
   sprite_index = spr_prota_abajo;
   break;
   case "arriba":
   sprite_index = spr_prota_arriba;
   break;
   case "izquierda":
   sprite_index = spr_prota_izquierda;
   break;
   case "derecha":
   sprite_index = spr_prota_derecha;
   break;
    }
[/gml]

Muchas gracias si os tomais la molestia, un saludo!

22
Hola, buenas a todo el mundo. Es la primera vez que posteo en este foro.

Soy un completo novato en este mundo de la programación y es posible que lo que vaya a preguntar sea algo muy básico, llevo dos días intentándolo y no lo consigo.
La situación es la siguiente. Se trata de que cuando el personaje (protagonista) se acerque a una lapida aparezca una fantasma (con una animación) y después se quede flotando (me imagino que con otra animación diferente).

Esto es lo que puse en el evento Step de la lapida

if distance_to_object(objectPersonaje) <10 {
instance_create_layer(x,y,"Instances",objectFantasmaAparicion)
}


El problema es que cuando me acerco a la lapida no para de repetirse la animación y van apareciendo fantasmas todo el tiempo.
Mi intención es que haga la aparición una sola vez y después se quede flotando para poder iniciar un dialogo con el. Tengo una segunda animación con un segundo objeto (que es el fantasma flotando, nada una chorrada se mueve un pixel arriba y otro abajo) y la idea es esa, que aparezca y se quede flotando.

No se si me he explicado bien del todo, espero que con esta información me podais ayudar, un saludo!