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.

Mensajes - seed86

31
En este caso serían lanzas y no balas ya que se trata de un juego estilo ghouls N Goblins.
Mi problema es que cuando disparo una lanza en una dirección e inmediatamente disparo otra en la dirección contraria, todas las que se encuentran en pantalla cambian su sprite de derecha a izquierda (o al revés). Cómo se hace para cambiar el sprite en todo su trayecto sin que el sprite se vea afectado por nada?

Este es el código que estoy usando para ello y que tiene ese defecto:

//Spear:
if (Key_Spear) and (anime_throw = 1)
{
  spear = 1;
    anime_throw = 0;
    alarm[0] = 2;
    hsp = 0;
  if (grounded)
  {
    if (spear_rate = 1)
    {
      if (face_right) {spear_right = action_create_object_motion(obj_spear,x-40,y+10,40,0); obj_spear.image_xscale = 1;}
      if (face_left) {spear_left = action_create_object_motion(obj_spear,x+40,y+10,40,180); obj_spear.image_xscale = -1;}
      spear_rate = 0;
      alarm[1] = 5;
    }
  }
 
  else
  {
    if (spear_rate = 1)
    {
      if (face_right) {spear_right = action_create_object_motion(obj_spear,x-30,y+10,40,0); obj_spear.image_xscale = 1;}
      if (face_left) {spear_left = action_create_object_motion(obj_spear,x+30,y+10,40,180); obj_spear.image_xscale = -1;}
      spear_rate = 0;
      alarm[1] = 5;
    }
  }
}


Otro error que tengo es a la hora de crear un efecto de polvo cuando la lanza choca con una pared, cuando viaja a la derecha el polvo sale en las coordenadas que le he asignado yo (para que sea en la punta) pero si se mueve hacia la izquierda el sprite se invierte (image.xscale = -1) la nubecita de polvo sale detrás y no en la punta porque mantiene las coordenadas de antes.



¿Hay alguna manera de hacer esto mediante código o simplemente debo añadir otro objeto para la lanza en la otro dirección cos su propio código?

Gracias
32
creo que he conseguido arreglarlo añadiendo esto a Step:

if ((Key_Right or Key_Left) && Key_Spear) {hsp=0}

if (grounded && spear = 1) {hsp = 0}


Muchas gracias a todos!
33
ah! acabo de ver la actualización de tu anterior post, desde cambias la condicios de código en Animation End. Ahora parece que sí funciona. He utilizado image_speed para que la animación del lanzamiento sea muy rapida y luego la he restaurado a 1 en el evento Animation End también.
Tan solo he encontrado un molesto bug y es que si caes mientras oprimes "Z" (el botón de disparo) el sprite se mantiene en la imagen de la caida del salto en lugar de hacer la animación de andar por el suelo.


Me estás ayudando mucho Klys, si algún dia termino este juego, si lo deseas tu nombre podría estar en los créditos.
34
Gracias Klys, veo que me has visto tambien por otros foros jaja
He probado el código que me has pasado y aunque no funciona del todo bien, es un avance. Con tu código solo hace la animación cuando está despazándose, si el personaje está quieto no hace la animación. De igual manera el personaje no se queda anclado en el suelo durante el recorrido de la animación como quiero que haga. Para esto último creo que tendré que usar una alarma.
35
Poniendo image_index = -1 no pasa nada diferente.

El código del Animation End tampoco ha sido la solución pero no se si lo estoy usando correctamente.

Estoy trabajando TODO el código en el step, puede ser que a causa de eso se de este error?

Os lo pongo aqui todo el código del personaje:

CREATE
vsp = 0;
hsp = 0;
grav = 4;
grounded = 0;
frict = 3;



STEP
//Imputs:
Key_Left    =   keyboard_check_direct(vk_left);
Key_Right   =   keyboard_check_direct(vk_right);
Key_Jump    =   keyboard_check_pressed(ord("X"));
Key_Gradual_Jump = keyboard_check_released(ord("X"));
Key_Spear = keyboard_check_pressed(ord("Z"));


//Move left and right
if (Key_Left)
{
    hsp = -20;
    image_xscale = -1;
}

if (Key_Right)
{
    hsp = 20;
    image_xscale = 1;
}


//Neutral input = 0 movement
if (Key_Right && Key_Left)
{
    hsp = 0;
}



//Grip (friction)
hsp = max((abs(hsp) - frict),0) * sign(hsp);



//Jumping
if (Key_Jump)
{
    if (grounded) vsp = -46;
}

vsp += grav;
   

//Gradual Jump
if (Key_Gradual_Jump)
{
if (vsp < 0)
{
   vsp = vsp/2
}
}


//Horizontal Collision
if place_meeting(x+hsp,y,par_wall)
{
    while (!place_meeting(x+sign(hsp),y,par_wall)) x+=sign(hsp);
    hsp = 0;
}
x += hsp;


//Vertical Collision
if place_meeting(x,y+vsp,par_wall)
{
    while (!place_meeting(x,y+sign(vsp),par_wall)) y+=sign(vsp);
    if (sign(vsp) == 1) grounded = 1;
    vsp = 0;
   
}
else
{
    grounded = 0;
}


//Commit to movement

y += vsp;



////////////////////////////////////////////////

//Walk Sprites
if (grounded)
{
   if (hsp == 0 )
   {
      sprite_index = spr_hero_idle_right;
   }
   else
   {
      if (!sprite_index = spr_hero_right) image_index = 0;
      sprite_index = spr_hero_right;
   }
}

else    //Jump Sprites:
{
   if (vsp<0)
   {
      sprite_index = spr_hero_jump;
   }
   else
   {
      sprite_index = spr_hero_fall1;
      if (vsp>12)
      {
         sprite_index = spr_hero_fall2;
      }
   }
}


////////////////////////////////////////
//Shoot:


//Spear:
if (Key_Spear)
{
  if (grounded)
  {
    if (!sprite_index = spr_hero_spear)  image_index = -1;
    sprite_index = spr_hero_spear;
    instance_create(x+104,y+10,obj_spear);
    hsp = 0;
  }
}
36
Gracias por tu respuesta, pero haciendo eso que me dices la animación de ataque sigue con el mismo problema (solo aparece un frame) y utilizando el image_speed tan solo afecta a la animacion de andar cuando se desplaza.
37
Hola a todos soy nuevo en este foro, y probablemente me veais escribiendo por aqui a menudo ya que estoy inmerso en un proyecto en game maker Studio.

Se trata de un juego del estilo Ghouls N Ghosts. Quiero que cuando se pulse la tecla "Z" el personaje haga una animación de lanzamiento de una lanza, y mientras que esta animación esta en curso el personaje no pueda moverse. Mi problema es que cuando pulso "Z" solo aparece el primer frame de la animación (como un parpadeo) y el personaje no se queda quieto.

Os dejo el código para ver qué hay que corregir:

Key_Spear = keyboard_check_pressed(ord("Z"));

//Spear:
if (Key_Spear)
{
  if (grounded)
  {
    if (!sprite_index = spr_hero_spear)  image_index = 0;
    sprite_index = spr_hero_spear;
    instance_create(111,76,obj_spear);
    hsp = 0; 
   
  }
}