Game Maker Studio 2:Duda de programación

N

Hola buenas!
me gustaría saber como puedo hacer un cambio de sprite a otro pulsando una tecla del teclado, los sprites son iguales la única diferencia es el color.
Gracias!

B

1 minuto me ha costado en google

if keyboard_check_pressed(ord("E"))
{
    if sprite_index==spr_black
        sprite_index = spr_white
    else 
        sprite_index = spr_black;
}

Mira a ver si con cambiar la tecla y los nombres de los sprites te funciona

N

Gracias por contestar, pero no me funciona; cuando le doy a la "E" se cambia de sprite por un milisegundo y dependiendo de la dirección no llega a cambiarse.
mi intención es que al pulsar la tecla cambie de color (sprite) y que se mantenga en dicho color.

1 respuesta
Escipionicus

#3 Probá sin el "_pressed".

N

sin el _pressed se me cambia de color cuando mantengo la tecla pulsada y cuando la dejo de pulsar vuelve al original, es eso lo que quiero cambiar. si alguien sabe el porque que me lo diga por favor.
(gracias a todos por responder)

B

Tienes que hacer algo así

spriteOriginal = nombreSpriteVerde;
spriteNuevo = nombreSpriteRojo:

if keyboard_check(ord("E"))
{
   spriteTemporal = spriteOriginal;
   spriteOriginal = spriteNuevo;
   spriteNuevo = spriteTemporal;
}

Con eso intercambiará los sprites, ya hay que buscar cual de las interacciones con el teclado que sea un único uso. Estilo keyButtonDown o KyeButtoUp o lo que use Game Maker.

N

me pone que al no tener una constante no me lo puede ejecutar.
Voy a plantear mi duda desde otro punto de vista para ver si así se puede solucionar de otra manera:
en mi juego tendré 3 sprites los cuales hacen los mismos movimientos, y quiero que al pulsar 1, 2 o 3 se cambien entre ellos (ej: al pulsar 1 se convierte en verde, al pulsar el 2 en azul y al pulsar el 3 en amarillo) y mi intención es que da igual en que sprite estés que se pueda cambiar a otro y después pueda volver al mismo sin problemas (que se vayan intercalando a gusto del jugador)

1 respuesta
Jastro

#7 Hace tiempo que no toco GM, pero la logica que quieres aplicar, te lo pongo en pseudocodigo, y ya tu te buscas la vida. (Basicamente porque ya no lo uso y no me acuerdO). Te explico la lógica

En el init de personaje:

var actual_animation = "char_green" //Esto suponiendo que quieras el verde primero. Si no escoge otro color.

en el step

Si se apreta el uno:
     this.actual_animation = "char_green"
Si se apreta el dos:
     this.actual_animation = "char_blue"
Si se apreta el tres:
     this.actual_animation = "char_yellow"
//Animations.
Si la velocidad es 0.
     sprite_index = this.actual_animation + '_idle';
si la velocidad es superior de > 0
     sprite_index = this.actual_animation + '_run';
si la velocidad es superior de < 0
     sprite_index = this.actual_animation + '_run';
     image_xscale = -1 //le damos la vuelta a la imagen.

Colocas todas animaciones del estilo
char_green_idle (para el verde que esta quieto)
char_blue_idle (para el azul que esta quieto)
char_yellow_idle (para el amarillo que esta quieto)

Y con eso lo tendrias. Seguro que hay otra forma mejor, pero asi a bote de pronto se me ocurre eso.

11 días después
javifugitivo

El problema viene que estás usando un else que en el momento que dejas de pulsar el botón te vuelve al anterior:

Solución: 3 eventos IF separados con cada tecla en el step:
Ejemplo:

if keyboard_check_pressed(ord("A"))
{
    sprite_index = spr_A
}
if keyboard_check_pressed(ord("B"))
{
    sprite_index = spr_B
}
if keyboard_check_pressed(ord("C"))
{
    sprite_index = spr_C
}

Usuarios habituales