Efectos de transicion entre pantallas.

Started by JaViS, August 21, 2011, 04:17:19 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

JaViS

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!!!
Working on Anarkade. A couch multiplayer 2D shooter.

josebita

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() 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 :)

FreeYourMind


l1nk3rn3l

en el bennupack seccion

\Medium Examples\Effects

josebita


FreeYourMind

Voy a mirar si tambien esta alguna chavala

JaViS

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
Working on Anarkade. A couch multiplayer 2D shooter.

La momia que fuma

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)

JaViS

muchisimas gracias Momia!!! voy a probarlo ahora mismo! :D
Working on Anarkade. A couch multiplayer 2D shooter.

La momia que fuma

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

JaViS

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!!
Working on Anarkade. A couch multiplayer 2D shooter.

FreeYourMind

No te va servir Josebita, esas transiciones estan condenadas a ser lentas en dispositivos ARM.

JaViS

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 :(
Working on Anarkade. A couch multiplayer 2D shooter.

La momia que fuma

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 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

JaViS

bueno, me queda solucionar un tema de la resolucion y lo comparto :)
Working on Anarkade. A couch multiplayer 2D shooter.