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!!!
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 :)
El ejemplo circula por ahi
en el bennupack seccion
\Medium Examples\Effects
Todo está en el bennupack!
Voy a mirar si tambien esta alguna chavala
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
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)
muchisimas gracias Momia!!! voy a probarlo ahora mismo! :D
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
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!!
No te va servir Josebita, esas transiciones estan condenadas a ser lentas en dispositivos ARM.
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 :(
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
bueno, me queda solucionar un tema de la resolucion y lo comparto :)
: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