Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Naitsabes0 en Agosto 21, 2017, 07:54:53 AM

Título: ¿Cual seria la mejor opción para esta animación? [Probablemente Resuelto]
Publicado por: Naitsabes0 en Agosto 21, 2017, 07:54:53 AM
NOTA: El problema se resume en solo 1 linea al final del post, los detalles del texto es información adicional para ver de que va el problema, esto lo menciono para que no sea molesto leer mis inquietudes de novato.  ;)
(https://i.gyazo.com/c88347de7843ca1804d469bedb2b5cb0.gif)
Pues resulta que esta simple animación de intervalos de luz y oscuridad se puede hacer con unos simples códigos por lo que creo, pero esta animación es pesada por el tamaño de la vista del jugador (720x720 23mb), ademas de que son 12 fotogramas para un juego donde el jugador mide 16X24 y y se maneja con 4-8 imágenes de animación, entonces lo que busco es armar un código para que se vuelva visible.

Esto es lo que he pensado

Tener 1 sola imagen oscura inicial para que no pese tanto, aplicarle algún código para que aumente su opacidad poco a poco hasta volverse clara por completo, hasta hay no habría problema, ya que el código que usaba para el GAME OVER hacia la pantalla oscura, pero el problema es ¿como debería armarlo para que cuando el nivel de opacidad sea 0, este vuelva a llegar a su valor actual (255 por lo que creo)?

La idea es que el código sea un bucle infinito como se ve en el GIF con solo 1 imagen.

(https://i.gyazo.com/4d9c91bc09f8f5d1a04d2b828a1ddf4c.gif)
Quiero mencionar de que he logrado hacer el efecto que deseo en el juego con image_speed, pero creo que es un gasto innecesario armar una animación con un objeto tan grande para un juego tan pequeño, sobre todo porque solo es cosa de opacidad.
Gracias por leer hasta aquí.  :)
Título: Re:¿Cual seria la mejor opción para esta animación?
Publicado por: Zapdos43 en Agosto 21, 2017, 11:11:04 AM
[gml]
// valores entre 0 y 1
image_alpha = 0; // transparente
image_alpha = 1; // opaco
image_alpha = 0.5; // semitransparente
[/gml]
Título: Re:¿Cual seria la mejor opción para esta animación?
Publicado por: Naitsabes0 en Agosto 21, 2017, 02:19:24 PM
Cita de: Zapdos43 en Agosto 21, 2017, 11:11:04 AM
[gml]
// valores entre 0 y 1
image_alpha = 0; // transparente
image_alpha = 1; // opaco
image_alpha = 0.5; // semitransparente
[/gml]
Ya se que image_alpha hace transparente las cosas de la escala 0 a 1, de hecho puedo hasta darle opacidad al sprite sin tener la necesidad de usar código, como ya he mencionado busco armar un bucle para que la oscuridad se vuelva luz y luego retorne indefinidamente, lo que me llega a la mente es

que la opacidad esta en 1
se va descontando hasta llegar a 0
cuando es 0 la opacidad va sumando hasta ser 1
...... pues algo como eso tendria que montar en codigo.

Creo que tendría que usar el create para dar el valor, el step para descontar y tal vez una alarma, a menos que solo se necesiten 2 eventos y no 3 como creo que debería ser  ???, sea como fuera el caso el resultado debe dar el efecto del GIF.
Título: Re:¿Cual seria la mejor opción para esta animación?
Publicado por: Zapdos43 en Agosto 21, 2017, 02:46:04 PM
La idea es correcta. Usas un evento create y un evento step.
evento create:
[gml]
alpha = 1;
sumar = false;
image_alpha = alpha;
[/gml]

evento Step:
[gml]
if alpha <= 0
{
sumar = true;
} else if alpha >= 1
{
sumar = false;
}

if (sumar)
{
alpha += 0.01;
}
else
{
alpha -= 0.01;
}
image_alpha = alpha;
[/gml]
Título: Re:¿Cual seria la mejor opción para esta animación?
Publicado por: Naitsabes0 en Agosto 22, 2017, 05:31:49 AM
Cita de: Zapdos43 en Agosto 21, 2017, 02:46:04 PM
La idea es correcta. Usas un evento create y un evento step.
evento create:
[gml]
alpha = 1;
sumar = false;
image_alpha = alpha;
[/gml]

evento Step:
[gml]
if alpha <= 0
{
sumar = true;
} else if alpha >= 1
{
sumar = false;
}

if (sumar)
{
alpha += 0.01;
}
else
{
alpha -= 0.01;
}
image_alpha = alpha;
[/gml]
Bueno he estado jugando con los valores para que se aclare y oscurezca de forma suave y agradable a la vista, pero aunque cambie los valores igual la velocidad del cambio de luminosidad se vuelve muy loca, esta es la leve diferencia a la que he llegado experimentando.
STEP::::::::::::::::::::::::::::::::
action_potential_step(view_xview[0]-48,view_yview[0]-48,room_height+room_width,false);
if alpha <= 0
{
sumar = true;
} else if alpha >= 1
{
sumar = false;
}

if (sumar)
{
alpha += 0.0000001; //inicie con 0.01 el que estaba por defecto hasta llegar a este valor
}
else
{
alpha -= 0.0000001; //inicie con 0.01 el que estaba por defecto hasta llegar a este valor
}
image_alpha = alpha;

Como puede ver fui agregando 0 tras 0 para ver si podía hacer el proceso mas suave pero...
(https://i.gyazo.com/9d7ac3bb568a1324e56c92d9b71df6e4.gif)
Esta todavía en un cambio muy frenético, asiendo que sea un poco molesto, o al menos eso es de mi punto de vista, ya que debe ser controlado como el GIF del primer texto del post ¿debería cambiar otros valores de este código, o simplemente no se puede controlar la velocidad con la que el sprite completamente oscuro se opaca?
Título: Re:¿Cual seria la mejor opción para esta animación?
Publicado por: Zapdos43 en Agosto 22, 2017, 09:22:08 AM
Sigue probando a cambiar cuánto se suma o resta la opacidad. Por ejemplo, prueba:

[gml] alpha += 5/room_speed;[/gml]
Si tienes una room con 60 FPS entonces 5 / 60 = 0.0833

[gml] alpha += 0.5/room_speed;[/gml]
Si son 60 FPS entonces 0.5 / 60 = 0.0083
Título: Re:¿Cual seria la mejor opción para esta animación?
Publicado por: Naitsabes0 en Agosto 22, 2017, 12:31:33 PM
Cita de: Zapdos43 en Agosto 22, 2017, 09:22:08 AM
Sigue probando a cambiar cuánto se suma o resta la opacidad. Por ejemplo, prueba:

[gml] alpha += 5/room_speed;[/gml]
Si tienes una room con 60 FPS entonces 5 / 60 = 0.0833

[gml] alpha += 0.5/room_speed;[/gml]
Si son 60 FPS entonces 0.5 / 60 = 0.0083
Bueno son de 30 fotogramas las room, pero he probado ambos códigos y resulta que tanto restando como sumando, como colocando valores enteros y valores decimales, la velocidad no se puede controlar bien con este código, o tal vez hay algo que no cuadra, sea cual sea el caso este seria el código reciente en base a su consejo.

STEP::::::::::::::::::::::::::::::::::
action_potential_step(view_xview[0]-48,view_yview[0]-48,room_height+room_width,false);
if alpha <= 0
{
sumar = true;
} else if alpha >= 1
{
sumar = false;
}

if (sumar)
{
alpha += 2.5/room_speed;
}
else
{
alpha -= 2.5/room_speed;
}
image_alpha = alpha;
Título: Re:¿Cual seria la mejor opción para esta animación?
Publicado por: Zapdos43 en Agosto 22, 2017, 01:10:19 PM
Puedes dibujar el recuadro desde el evento draw:
Por ejemplo:

create:
[gml]
depth = -1000; // o tambien puedes cambiar esta propiedad desde las propidesdes del objeto (Depth)
alpha = 1;
color = make_color_rgb(0,0,0); // color negro en modo RGB (r = 0, g = 0, b = 0)
sumar = false;
[/gml]

step:
[gml]
if alpha <= 0
{
sumar = true;
} else if alpha >= 1
{
sumar = false;
}

if (sumar)
{
alpha += 0.001;
}
else
{
alpha -= 0.001;
}
[/gml]

draw:
[gml]
draw_set_color(color);
draw_set_alpha(alpha);
draw_rectangle(view_xview[0],view_yview[0],view_xview[0]+view_wview[0],view_yview[0]+view_hview[0],false);
[/gml]

Título: Re:¿Cual seria la mejor opción para esta animación?
Publicado por: Naitsabes0 en Agosto 23, 2017, 05:07:04 AM
Cita de: Zapdos43 en Agosto 22, 2017, 01:10:19 PM
Puedes dibujar el recuadro desde el evento draw:
Por ejemplo:

create:
[gml]
depth = -1000; // o tambien puedes cambiar esta propiedad desde las propidesdes del objeto (Depth)
alpha = 1;
color = make_color_rgb(0,0,0); // color negro en modo RGB (r = 0, g = 0, b = 0)
sumar = false;
[/gml]

step:
[gml]
if alpha <= 0
{
sumar = true;
} else if alpha >= 1
{
sumar = false;
}

if (sumar)
{
alpha += 0.001;
}
else
{
alpha -= 0.001;
}
[/gml]

draw:
[gml]
draw_set_color(color);
draw_set_alpha(alpha);
draw_rectangle(view_xview[0],view_yview[0],view_xview[0]+view_wview[0],view_yview[0]+view_hview[0],false);
[/gml]
El resultado fue que ahora los proyectiles y la interfaz de usuario aparece y desaparece, también los poderes, pero aunque no era lo que buscaba como resultado final, adquirió una mecánica que nunca he visto, y la verdad me gusta, ya que se siente única, podría decirse de cierta forma que el problema esta resuelto  ;D.