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!
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
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.
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)
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.
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)
#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.
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
}