Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: jacksu456 en Marzo 15, 2015, 04:46:25 PM

Título: Ayuda!(En programacion) Cual es el codigo para cambiar de animacion
Publicado por: jacksu456 en Marzo 15, 2015, 04:46:25 PM
Ok, como dice el titulo, quiero que mi personaje al caminar a la derecha, ejemplo:     key_right = keyboard_check(ord("D"));     Que cuando presione la D se reproduzca el sprite de animacion de correr, y asi viceversa, a la izquierda, y cuando este sin moverme en absoluto, hacer la animacion principal que es de simplemente quedarse ahi (La cual tambien le tengo el sprite), y tambien para saltar, se que tiene que ver algo con image_index o algo asi, pero necesito ayuda, y si tambien me pueden ayudar a saber el codigo para cuando colisiono con una pared de lado haga una animacion, estaria muy agradecido, gracias.
Título: Re:Ayuda!(En programacion) Cual es el codigo para cambiar de animacion
Publicado por: Silver_light en Marzo 15, 2015, 05:36:12 PM
La variable que se utiliza para controlar el sprite del objeto actual al cual se desea cambiar la animacion es:
[GML]
sprite_index
[/GML]

Entonces si quisieras cambiar el sprite, en un evento Step, por ejemplo:
[GML]
key_right = keyboard_check(ord("D"));

if (key_right)
   if (sprite_index != spr_personaje_corriendo_hacia_la_derecha) // Esta linea es necesaria, de lo contrario el sprite se iniciaria infinitamente y daría la sensacion de que es una imagen estática
      sprite_index = spr_personaje_corriendo_hacia_la_derecha;
[/GML]

La variable "image_index" que mencionas es para cambiar la subimagen dentro de un sprite determinado.
Entonces suponiendo que el sprite de "spr_personaje_corriendo_hacia_la_derecha" tiene 10 subimagenes, para colocar la animacion al final bastaría con:

[GML]
image_index = 9; // Nueve porque las subimagenes de los sprites van de 0 a 9, haciendo un total de 10
[/GML]

Luego la misma lógica aplicaría para cualquier animacion, por ejemplo la de salto y cualquier otra que desées hacer.
Un ejemplo para cambiar el sprite de salto podría ser:
[GML]
key_up = keyboard_check(ord("W")); // se presiona la tecla de salto

if (key_up )
{
   if (sprite_index != spr_personaje_saltando_hacia_la_derecha)
      sprite_index = spr_personaje_saltando_hacia_la_derecha;

   vspeed = -10;
}
[/GML]

Finalmente, como digo, la misma lógica puede aplicarse para otras animaciones, como colisiones o al presionar la tecla izquierda o bien "A", siguiendo el código.
Título: Re:Ayuda!(En programacion) Cual es el codigo para cambiar de animacion
Publicado por: jacksu456 en Marzo 15, 2015, 05:53:16 PM
Cita de: Silver_light en Marzo 15, 2015, 05:36:12 PM
La variable que se utiliza para controlar el sprite del objeto actual al cual se desea cambiar la animacion es:
[GML]
sprite_index
[/GML]

Entonces si quisieras cambiar el sprite, en un evento Step, por ejemplo:
[GML]
key_right = keyboard_check(ord("D"));

if (key_right)
   if (sprite_index != spr_personaje_corriendo_hacia_la_derecha) // Esta linea es necesaria, de lo contrario el sprite se iniciaria infinitamente y daría la sensacion de que es una imagen estática
      sprite_index = spr_personaje_corriendo_hacia_la_derecha;
[/GML]

La variable "image_index" que mencionas es para cambiar la subimagen dentro de un sprite determinado.
Entonces suponiendo que el sprite de "spr_personaje_corriendo_hacia_la_derecha" tiene 10 subimagenes, para colocar la animacion al final bastaría con:

[GML]
image_index = 9; // Nueve porque las subimagenes de los sprites van de 0 a 9, haciendo un total de 10
[/GML]

Luego la misma lógica aplicaría para cualquier animacion, por ejemplo la de salto y cualquier otra que desées hacer.
Un ejemplo para cambiar el sprite de salto podría ser:
[GML]
key_up = keyboard_check(ord("W")); // se presiona la tecla de salto

if (key_up )
{
   if (sprite_index != spr_personaje_saltando_hacia_la_derecha)
      sprite_index = spr_personaje_saltando_hacia_la_derecha;

   vspeed = -10;
}
[/GML]

Finalmente, como digo, la misma lógica puede aplicarse para otras animaciones, como colisiones o al presionar la tecla izquierda o bien "A", siguiendo el código.



Y cual seria el codigo para la animacion de quedarse parado en un solo lugar sin moverse?
Título: Re:Ayuda!(En programacion) Cual es el codigo para cambiar de animacion
Publicado por: jacksu456 en Marzo 15, 2015, 06:22:56 PM
Cita de: Silver_light en Marzo 15, 2015, 05:36:12 PM
La variable que se utiliza para controlar el sprite del objeto actual al cual se desea cambiar la animacion es:
[GML]
sprite_index
[/GML]

Entonces si quisieras cambiar el sprite, en un evento Step, por ejemplo:
[GML]
key_right = keyboard_check(ord("D"));

if (key_right)
   if (sprite_index != spr_personaje_corriendo_hacia_la_derecha) // Esta linea es necesaria, de lo contrario el sprite se iniciaria infinitamente y daría la sensacion de que es una imagen estática
      sprite_index = spr_personaje_corriendo_hacia_la_derecha;
[/GML]

La variable "image_index" que mencionas es para cambiar la subimagen dentro de un sprite determinado.
Entonces suponiendo que el sprite de "spr_personaje_corriendo_hacia_la_derecha" tiene 10 subimagenes, para colocar la animacion al final bastaría con:

[GML]
image_index = 9; // Nueve porque las subimagenes de los sprites van de 0 a 9, haciendo un total de 10
[/GML]

Luego la misma lógica aplicaría para cualquier animacion, por ejemplo la de salto y cualquier otra que desées hacer.
Un ejemplo para cambiar el sprite de salto podría ser:
[GML]
key_up = keyboard_check(ord("W")); // se presiona la tecla de salto

if (key_up )
{
   if (sprite_index != spr_personaje_saltando_hacia_la_derecha)
      sprite_index = spr_personaje_saltando_hacia_la_derecha;

   vspeed = -10;
}
[/GML]

Finalmente, como digo, la misma lógica puede aplicarse para otras animaciones, como colisiones o al presionar la tecla izquierda o bien "A", siguiendo el código.

Y por cierto, no se porque, si lo hice bien o mal, pero no me esta funcionando, mira chequea el codigo STEP que tengo:

[GML]///Codigos de movimientos y cosas asi.

key_right = keyboard_check(ord("D"));
if (key_right)
    if (sprite_index != spr_playerRR)
        sprite_index = spr_playerRR;
       
key_left = -keyboard_check(ord("A"));
if (key_left)
    if (sprite_index != spr_playerRL)
        sprite_index = spr_playerRL;

key_jump = keyboard_check_pressed(vk_space);
//

//

move = key_left + key_right;
hsp = move * movespeed;
if (vsp < 10) vsp += grav;

if (place_meeting(x,y+1,obj_wall))
{
    jumps = jumpsmax;
}

if (key_jump) && (jumps > 0)
{
    jumps -= 1;
    vsp = -jumpspeed;
}

if (key_jump) &&  (place_meeting(x+1,y,obj_wall) || place_meeting(x-1,y,obj_wall))
{
    vsp = -jumpspeed;
}

// X

if (place_meeting(x+hsp,y,obj_wall))
{
    while(!place_meeting(x+sign(hsp),y,obj_wall))
    {
        x+= sign(hsp);
    }
    hsp = 0;
}

// Y

if (place_meeting(x,y+vsp,obj_wall))
{
    while(!place_meeting(x,y+sign(vsp),obj_wall))
    {
        y+= sign(vsp);
    }
    vsp = 0;
}

//

x += hsp;
y += vsp;

//
[/GML]

Cuando uso este codigo el personaje solo hace la animacion de correr a la derecha para saltar, quedarse parado, correr a la izquiera, o sea siempre la hace.
Título: Re:Ayuda!(En programacion) Cual es el codigo para cambiar de animacion
Publicado por: Silver_light en Marzo 15, 2015, 06:55:28 PM
Citar
Y cual seria el codigo para la animacion de quedarse parado en un solo lugar sin moverse?

Basicamente lo que deberías hacer es verificar si no se ha presionado las teclas de dirección y, por ejemplo esta en el suelo debería cambiar al sprite de estar en el lugar, algo como esto, obviamente adaptandolo a tu juego:

[GML]

if (keyboard_check_released(ord('A') && keyboard_check_released(ord('D'))
   if (place_free(x,y+1) == false)
      if (sprite_index != spr_personaje_parado_en_el_suelo)
         sprite_index = spr_personaje_parado_en_el_suelo;

[/GML]

Por lo segundo intenta cambiar las expresiones:
key_right = keyboard_check(ord("D"));

por

key_right = keyboard_check(ord('D'));

Notese que cambie las doble comillas " " por comillas simples ' '.
Título: Re:Ayuda!(En programacion) Cual es el codigo para cambiar de animacion
Publicado por: jacksu456 en Marzo 16, 2015, 01:09:42 AM
Cita de: Silver_light en Marzo 15, 2015, 06:55:28 PM
Citar
Y cual seria el codigo para la animacion de quedarse parado en un solo lugar sin moverse?

Basicamente lo que deberías hacer es verificar si no se ha presionado las teclas de dirección y, por ejemplo esta en el suelo debería cambiar al sprite de estar en el lugar, algo como esto, obviamente adaptandolo a tu juego:

[GML]

if (keyboard_check_released(ord('A') && keyboard_check_released(ord('D'))
   if (place_free(x,y+1) == false)
      if (sprite_index != spr_personaje_parado_en_el_suelo)
         sprite_index = spr_personaje_parado_en_el_suelo;

[/GML]

Por lo segundo intenta cambiar las expresiones:
key_right = keyboard_check(ord("D"));

por

key_right = keyboard_check(ord('D'));

Notese que cambie las doble comillas " " por comillas simples ' '.

Mira lo que al final hice, y sirvio:
[GML]
if hsp > 0
{
sprite_index = spr_playerRR;
}

if hsp < 0
{
sprite_index = spr_playerRL;
}

if hsp == 0 && vsp == 0
{
sprite_index = spr_playerI;
}

if vsp > 0 && hsp > 0
{
sprite_index = spr_playerJR;
}

if vsp > 0 && hsp < 0
{
sprite_index = spr_playerJL;
}

if vsp < 0 && hsp > 0 && !place_meeting(x,y+18,obj_wall)
{
sprite_index = spr_playerJR;
}

if vsp < 0 && hsp < 0 && !place_meeting(x,y+18,obj_wall)
{
sprite_index = spr_playerJL;
}
[/GML]

Pero ahora mira lo que ocurre cuando voy cayendo y justo cuando voy a llegar al piso estoy presionando las teclas de izquiera o derecha : https://www.youtube.com/watch?v=f72D39OkETI

Un video de mi proyecto en privado

Título: Re:Ayuda!(En programacion) Cual es el codigo para cambiar de animacion
Publicado por: 3dgeminis en Marzo 16, 2015, 06:14:43 AM
El problema que veo es en las colisiones, al caer se detiene unos pixels arriba de la plataforma y despues cae. Puede verse que cuando te moves todavia esta en el aire a unos pixels de la plataforma. Me parece que eso es lo que te esta dando el error.