Buenas familia. Otra vez ando por aqui.
Pues vengo con un pequeño problema, a ver si entre todos encontramos solucion.
Tengo una camara de vigilancia, que va girando de izquierdas a derecha, hasta aqui todo bien. (11 sprites)
El caso es que cuando, la camara ve al player, esta entra en modo alerta, cambiando el sprite a uno con un led rojo, etc. En este momento la camara se queda fija en una posicion, ya que en este sprite solo tiene una imagen.
El caso, es que la camara, al pasar unos segundos y ver que la alerta era falsa, pasa de nuevo a su estado de vigilancia, dando giros de izquierda a derechas.
el caso, esta en la transicion de cuando esta en alerta y pasa a estar en vigilancia, porque el sprite de vigilancia, salta la imagen 0, de las 11, y da un salto no muy agradable la camara.
He probado, al probar en el momento en el que cambio de sprite, a poner justo despues image_index = 1; que es donde me interesa que comienzo para suavizar la transicion de un estado a otro.
Pero el resultado es que se ve como comienza en la imagen 0 y salta rapidamente al 1, pero claro, ese salto queda feo.
la cuestion esta, en como pasar, a esa animacion, compuesta por 11 sprites, y que comience directamente desde la imagen que yo le indique, y que continue respectivamente desde esta.
No se si me he explicado bien, jejejeje. :-[
Bueno espero que entre todos podamos resolverlo. Seguro que alguien sabe algun truquillo.
Saludos y gracias de ante mano. ;)
Puedes usar una variable que indique el estado y asignar el sprite solo cuando ocurre la condición que cambia el estado
[gml]
// Evento Step
if( estado == 1 ) //modo vigilancia
{
// codigo de vigilancia ...
if( condicion_para_cambiar_a_alerta )
{
estado = 2; //alerta
sprite_index = spr_alerta;
image_index = 0;
image_speed = 0;
}
}
if( estado == 2 ) //modo alerta
{
// codigo de alerta ...
if( condicion_para_cambiar_a_vigilancia )
{
estado = 1; //vigilancia
sprite_index = spr_vigilancia;
image_index = 1;
image_speed = 0.2;
}
}
[/gml]
Muchas gracias por contestar. Perp eso mismo es lo que tengo hecho y se produce salto.
Porque desde que se asigna el sprite_index (que comienza en image 0) hasta que la siguiente orden es asignar image_index 1. Pasa un milisegundo y es donde se ve un pequeno salto cuando cambia de la image 0 a la image 1.
Ese es el problema.
A ver como lo resuelvo.
Cita de: Clamud en Agosto 16, 2017, 07:20:51 PM
Puedes usar una variable que indique el estado y asignar el sprite solo cuando ocurre la condición que cambia el estado
[gml]
// Evento Step
if( estado == 1 ) //modo vigilancia
{
// codigo de vigilancia ...
if( condicion_para_cambiar_a_alerta )
{
estado = 2; //alerta
sprite_index = spr_alerta;
image_index = 0;
image_speed = 0;
}
}
if( estado == 2 ) //modo alerta
{
// codigo de alerta ...
if( condicion_para_cambiar_a_vigilancia )
{
estado = 1; //vigilancia
sprite_index = spr_vigilancia;
image_index = 1;
image_speed = 0.2;
}
}
[/gml]
El código está bien construido.
Puedo proponerte a que indiques la velocidad de la animación cuando image_index sea 1:
if( estado == 2 ) //modo alerta
{
// codigo de alerta ...
if( condicion_para_cambiar_a_vigilancia )
{
estado = 1; //vigilancia
sprite_index = spr_vigilancia;
image_index = 1;
if (image_index == 1)
{
image_speed = 0.2;
}
}
}