Bennu Game Development

Foros en Español => General => Topic started by: JaViS on August 21, 2011, 04:17:19 PM

Title: Efectos de transicion entre pantallas.
Post by: JaViS on August 21, 2011, 04:17:19 PM
Hola gente linda.

Como andan!

Jodo esta vez para preguntar si alguien se hizo un efecto de transicion entre pantallas, estaba pensando en algo parecido a lo que se veia mucho en SNES, ya saben, el efecto de pixelacion que ocurria en toda la pantalla una vez que pasabas de un stage y a otro.

creo que hace tiempo atras vi algo hecho en Fenix, pero fue hace tanto tiempo que pude haberlo soñado.

Si no hay nada hecho, me imaginaba que podia aplicar algun tipo de algoritmo una vez que capturase la pantalla. Pero no se me ocurre cual, alguna idea?

muchas gracias!!!
Title: Re: Efectos de transicion entre pantallas.
Post by: josebita on August 21, 2011, 04:53:27 PM
El tema de la pixelación se me ocurre que puedes hacer así una vez tengas la pantalla capturada:
Imagina que quieres hacer píxeles que ocupen 16 (4x4) píxeles originales.
Yo leeria los 16 píxeles de la esquina superior izquierda del gráfico con map_get_pixel() (http://wiki.bennugd.org/index.php?title=Map_get_pixel) y obtendría los componentes del color con get_rgb() de cada uno de ellos y los sumaría por componentes. Una vez hayas leído (y sumado) los 16 colores por componentes, divides cada uno de los componentes por 16 (para hacer la media aritmética) y pintas un cuadrado de 4x4 en la posición de esos píxeles con el color que has obtenido.
Evidentemente luego vas haciendo lo mismo con el resto de la pantalla para ir rellenando.

Luego puedes volver a empezar con un algoritmo igual pero tomando 4 como "tamaño de píxel" (vamos, que cojas 16=4x4 cuadrados de los que has pintado antes) y les haces la misma transformación para tener cuadrados de tamaño 256=16x16. En tres o cuatro pasadas probablemente tengas un "tamaño de píxel" suficiente para hacer ya un fundido normal.

Lo que también se me ocurre es que puedes hacer una "media" un poco apañada, de forma que a los componentes del color que obtienes de hacer la media les sumas una cierta cantidad calculada para que al final de hacer las tres o cuatro pasadas que vayas a hacer la pantalla entera esté en blanco (o en negro si lo restas, claro) de forma que el fundido inicial no se note.

No sé si me he explicado muy bien :)
Title: Re: Efectos de transicion entre pantallas.
Post by: FreeYourMind on August 21, 2011, 08:58:10 PM
El ejemplo circula por ahi
Title: Re: Efectos de transicion entre pantallas.
Post by: l1nk3rn3l on August 21, 2011, 09:08:49 PM
en el bennupack seccion

\Medium Examples\Effects
Title: Re: Efectos de transicion entre pantallas.
Post by: josebita on August 21, 2011, 10:44:42 PM
Todo está en el bennupack!
Title: Re: Efectos de transicion entre pantallas.
Post by: FreeYourMind on August 22, 2011, 01:57:50 PM
Voy a mirar si tambien esta alguna chavala
Title: Re: Efectos de transicion entre pantallas.
Post by: JaViS on August 22, 2011, 04:30:33 PM
le pegué un ojeada y no es lo que esperaba, el efecto esta bien pero es quizas muy simple y no va a lograr mi objetivo, voy a tener que pensar en algo diferente
Title: Re: Efectos de transicion entre pantallas.
Post by: La momia que fuma on August 23, 2011, 01:20:23 AM
Si bien no es el efecto de pixelación que tu dices, voy a compartir aqui los de mi ultimo juego

process transicion(cual)
private xf;
begin
z=-99999;
flags=128;

graph=get_screen();


switch (cual)

case 1:
   
   set_center(0,graph,0,0);   
   x=99999;   
   While(xf>-320)
     xf--;
     fideo(xf);
   End
   while(get_id(type fideo)) frame; end
   
end

case 2:
   
   set_center(0,graph,0,0);     
   repeat
    angle-=ener;
    ener+=50;
    frame;
   until(angle<=-45000)
   
   ener=0;
   
   repeat
    y+= ener;
    ener++;
    frame;
   until(out_region(id,0))
   
end

case 3:

pantallay(1);
pantallay(2);
x=9999;
repeat frame; until(!get_id(type pantallay))

end

case 4:

pantallax(1);
pantallax(2);
x=9999;
repeat frame; until(!get_id(type pantallax))

end

end

unload_map(0,graph);

end

process pantallay(cual)
begin
z=-99999;
graph=new_map(160,240,16);
y=120;
flags=128;
if(cual==1)
x=240;
map_put(file, graph, father.graph, 0, 120);
ener=-1;
else
x=80;
map_put(file, graph, father.graph, 160, 120);
ener=1;
end

repeat
est+=ener;
y+=est;
frame;
until(out_region(id,0))

end

process pantallax(cual)
begin
z=-99999;
graph=new_map(320,120,16);
x=160;
flags=128;
if(cual==1)
y=60;
map_put(file, graph, father.graph, 160, 120);
ener=-1;
else
y=180;
map_put(file, graph, father.graph, 160, 0);
ener=1;
end

repeat
est+=ener;
x+=est;
frame;
until(out_region(id,0))

end

process fideo(cual)

private
float vy;
int a;

begin
z=-99999;
flags=128;
y=240;x=-cual+(1/2);
a=-50;
vy=rand(0,20);
graph=new_map(1,480,16);
map_put(0,graph,father.graph,cual,0); 
repeat
   a++;
   y+=vy;
   vy+=0.05;
   if(a==5) a=0; vy+=0.05; end
   //angle+=ang;
   alpha--;
   frame;
until(out_region(id,0))
unload_map(0,graph);
end


Se llama al proceso transicion indicándole en el parámetro que tipo de transición queremos de entre varias. Hay una en la que la pantalla se "derrite" en lineas, otra en la que se descuelga por una esquina y cae, y dos en la que se parte a la mitad y cada mitad se va por su lado (En horizontal y en vertical)
Title: Re: Efectos de transicion entre pantallas.
Post by: JaViS on August 23, 2011, 02:05:54 AM
muchisimas gracias Momia!!! voy a probarlo ahora mismo! :D
Title: Re: Efectos de transicion entre pantallas.
Post by: La momia que fuma on August 23, 2011, 02:07:50 AM
Avisame si no funciona, lo copie a toda prisa y de cualquier manera, es posible que me haya dejado algún proceso fuera o que me haya cargado algo xD
Title: Re: Efectos de transicion entre pantallas.
Post by: JaViS on August 23, 2011, 05:21:12 PM
arreglé la falta de declaracion de algunas variables, corregí algun tema de velocidad, pero en iphone la captura de pantalla parece andar MUUUUUUUUY lento, es algo que quizas deberia ver Josebita, asi que no lo voy a poder usar en esa plataforma. Aunque si lo voy a dejar para las otras :D

muchas gracias!!
Title: Re: Efectos de transicion entre pantallas.
Post by: FreeYourMind on August 23, 2011, 05:40:32 PM
No te va servir Josebita, esas transiciones estan condenadas a ser lentas en dispositivos ARM.
Title: Re: Efectos de transicion entre pantallas.
Post by: JaViS on August 24, 2011, 02:20:14 PM
Quote from: FreeYourMind on August 23, 2011, 05:40:32 PM
No te va servir Josebita, esas transiciones estan condenadas a ser lentas en dispositivos ARM.

pero no es el rendimiento de la transicion, si no el tiempo que toma en capturar la pantalla :(
Title: Re: Efectos de transicion entre pantallas.
Post by: La momia que fuma on August 24, 2011, 02:46:13 PM
Quote from: JaViS on August 23, 2011, 05:21:12 PMcorregí algun tema de velocidad

Imagino que en la transición de los "fideos" sobre todo, que es la más lenta. Si sirve de algo, originalmente (http://forum.divsite.net/viewthread.php?tid=1667&page=1#pid11181) la hice con el tamaño de los fideos ajustable, no necesariamente de 1 pixel de ancho, cuanto mas anchos mejor rendimiento. El que no use alpha también ayuda. Aunque bueno, siendo el problema de lentitud al capturar pantalla, supongo que no te sirve.

Pero si le has optimizado algo más aparte de lo que he dicho, compartelo! :P
Title: Re: Efectos de transicion entre pantallas.
Post by: JaViS on August 24, 2011, 03:42:42 PM
bueno, me queda solucionar un tema de la resolucion y lo comparto :)
Title: Re: Efectos de transicion entre pantallas.
Post by: La momia que fuma on August 24, 2011, 05:08:52 PM
 :o

Ahora que mencionas la resolución, me acabo de dar cuenta de que el codigo que puse esta pensado para 320x240 (Cosa que me olvide comentar cuando lo puse), pero los "fideos" los deje con unos innecesarios 480 pixels de alto cada uno, ya que en principio hice el efecto para 640x480