Problema con fade

Started by master, April 01, 2013, 09:00:53 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

master

Hola

Tengo un problema al momento de aplicar un fade en la pantalla, ya que hay veces que ocurre y hay veces que no

Fade(0,0,0,64);
frame;
Fade(100,100,100,3);
while(fading==1)
    frame;
    say("fadding");
end
say("normal")


como verán es muy sencillo

mi intención es: que al hacer una serie de movimientos en un menú, el paso de un submenú a otro se vea suave usando Fades

esta seria una estructura básica de lo que tengo
Main
|-submenu 1
|-submenu 2

Esto pasa en Ubuntu:

El Main ejecuta el submenu1
Fade
Submenu1
elijo una opción en la que el submenu1 muere y Main vuelve a abrir el mismo submenu1
Fade
Submenu1
elijo una opción en la que el submenu1 muere y Main abre invoca al submenu2
Fade
Submenu2
elijo una opción en la que el submenu2 muere y Main abre submenu1
Fade
Submenu1

Esto pasa en Caanoo

El Main ejecuta el submenu1
Fade
Submenu1
elijo una opción en la que el submenu1 muere y Main vuelve a abrir el mismo submenu1
Fade (no sucede este fade cuando elijo esta opción)
Submenu1
elijo una opción en la que el submenu1 muere y Main abre invoca al submenu2
Fade
Submenu2
elijo una opción en la que el submenu2 muere y Main abre submenu1
Fade
Submenu1

como verán, no se ejecuta ese fade y no es por otra condición que no les halla dicho, también coloque un say después de fadding que imprime "Normal" y este siempre se imprime normalmente. Como ya dije, esto solo pasa cuando invoco el mismo submenú en caanoo.

¿Que sucede? ¿hay alguna condición para usar fade? ¿lo estoy usando mal? ¿porque en ubuntu funciona bien y en caanoo no?
(tengo otro caso que necesito revisar donde los fades no hacen su trabajo, pero este caso creo que es mas fácil de explicar en este post).

Erkosone

Buenas Master, te comento mis experiencias con esto del fade(), a mi me ha pasado que al hacer un fade la variable fading no se pone a true hasta que no pasa un frame, entonces lo que hago es ponerla manualmente a true justo después del fade, no se si tendrá que ver con tu problema, pero quizá sea algo similar, prueba esto:


..
fade(.... ;
fading = true;
while(fading)
frame;
end
..
..

master

Quote from: Erkosone on April 02, 2013, 05:25:03 AM
Buenas Master, te comento mis experiencias con esto del fade(), a mi me ha pasado que al hacer un fade la variable fading no se pone a true hasta que no pasa un frame, entonces lo que hago es ponerla manualmente a true justo después del fade, no se si tendrá que ver con tu problema, pero quizá sea algo similar, prueba esto:


..
fade(.... ;
fading = true;
while(fading)
frame;
end
..
..

Gracias
Lo acabo de probar, pero nunca sale del while (bucle infinito). el fade sigue sin trabajar.

fulgorelizz

saludos!! hey, tengo entendido que el fade(100,100,100,n) es para llevar a la pantalla a la iluminacion estandar, de hecho cuando haces fade_on la pantalla es llevada a un fade donde R=100,G=100,=B=100 que seria la base de luz standar para un renderizado normal (a niveles de luz), cuando haces fade(255,255,255,n) sobre saturas de luz los R,G,B por lo que las pantallas se ven mas blancas, por lo contrario si haces un fade(0,0,0,n) le quitaras la luz a la pantalla , el fade(0,0,0,n) es igual a fade_off() y la variable fading es de solo lectura, esta cambia de true a false mientras se hace un cambio de luz en la pantalla, cuando hacemos el codigo

fade(255,255,255,1)
while(fading)
frame;
end

le estamos diciendo al programa que no ejecute lineas de comando en el proceso que hace el fade, hasta que el proceso de cambio de luz haya culminado.

espero esta info te haya sido de ayuda
Compiling code -- generating exe...

master

#4
Quote from: fulgorelizz on April 03, 2013, 01:38:09 PM
saludos!! hey, tengo entendido que el fade(100,100,100,n) es para llevar a la pantalla a la iluminacion estandar, de hecho cuando haces fade_on la pantalla es llevada a un fade donde R=100,G=100,=B=100 que seria la base de luz standar para un renderizado normal (a niveles de luz), cuando haces fade(255,255,255,n) sobre saturas de luz los R,G,B por lo que las pantallas se ven mas blancas, por lo contrario si haces un fade(0,0,0,n) le quitaras la luz a la pantalla , el fade(0,0,0,n) es igual a fade_off() y la variable fading es de solo lectura, esta cambia de true a false mientras se hace un cambio de luz en la pantalla, cuando hacemos el codigo

fade(255,255,255,1)
while(fading)
frame;
end

le estamos diciendo al programa que no ejecute lineas de comando en el proceso que hace el fade, hasta que el proceso de cambio de luz haya culminado.

espero esta info te haya sido de ayuda

Gracias por responder fulgorelizz, pero yo ya sabia eso ;D
te explico mi codigo

Fade(0,0,0,64); //oscuresco la pantalla de golpe (64)
frame;
Fade(100,100,100,3); //La regreso a luz estándar suavemente
while(fading==1) //detengo el proceso hasta que termine el desvanecido
    frame;
    say("fadding"); //esto es para saber si entra al ciclo de fading
end
say("normal");//esto es para saber si se ejecutan las lineas del fade


Y con los say's pude comprobar que hay veces que bennu no hace los fade correctamente, esto lo digo porque cuando no hace fade se imprime el say("normal") pero el say("fadding") no.

En algunos casos, los 2 say's se imprimen y solo en esos casos el fade funciona.

Mas en concreto, cuando corro mi juego en PC linux, algunos fade que si se ejecutan, En mi consola Caanoo no lo hacen (y viceversa), y no se imprime el say("fadding") pero si el say("normal")

Pienso que puede ser un error en bennu o tal ves me falta algo en el código que ignoro.

SplinterGU

si los valores rgb ya estan en 100% no hara el fade.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

master

#6
Quote from: SplinterGU on April 03, 2013, 06:27:42 PM
si los valores rgb ya estan en 100% no hara el fade.
Pero no están en 100% porque 2 lineas antes lo fije a 0% con la instrucción Fade(0,0,0,64) y luego hago frame para evitar posibles inconvenientes. Asi que deberia hacer el fade pero no lo hace
¿o me falta algo?
Lo raro es que en caanoo no se ve este fade en particular pero en PC si, y en otros casos ni en pc revés

SplinterGU

no, no tienes que hacer fade a 0, y luego un frame... luego del fade 0 tienes que hacer un while(fading) para ponerlo a 0 realmente, si no haces esto, el fade a 100, hara lo que te pasa a ti.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

master

Quote from: SplinterGU on April 03, 2013, 06:36:39 PM
no, no tienes que hacer fade a 0, y luego un frame... luego del fade 0 tienes que hacer un while(fading) para ponerlo a 0 realmente, si no haces esto, el fade a 100, hara lo que te pasa a ti.

Gracias SplinterGU, ya me funcionó, habia puesto solo el frame porque en la wiki leí que cuando uno setea la velocidad del fade a 64, el cambio se hace en un frame. ;D

aveces me pregunto, ¿porque tengo poblemas con lo mas sencillo? jeje.

SplinterGU

de nada.

lo mas sencillo es a veces lo mas dificil. ;)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

fulgorelizz

Quote from: SplinterGU on April 03, 2013, 06:51:18 PM
de nada.

lo mas sencillo es a veces lo mas dificil. ;)

exacto!! jeje ahora que veo el codigo tambien lo note!! son ciclos de transicion necesarios, es como while($t = mysql_fetch_objet()) de php y mysql si uno requiero recorrer todo los registros emitidos por una consulta debe realizarse este ciclo religiosamente, de la misma forma pasa con el fade y el while(fading) , es religioso trabajar el fade y el while(fading), no esperaba menos de ti splinter maestro!  8)
Compiling code -- generating exe...

SplinterGU

de nada.

pero esto no impide que mientras hagas el while(fading) dentro del while puedas hacer otras cosas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

fulgorelizz

 8) exacto!! eso es lo que hace facil hacer videojuegos en bennu
Compiling code -- generating exe...

Drumpi

Quote from: master on April 03, 2013, 06:47:13 PM
Quote from: SplinterGU on April 03, 2013, 06:36:39 PM
no, no tienes que hacer fade a 0, y luego un frame... luego del fade 0 tienes que hacer un while(fading) para ponerlo a 0 realmente, si no haces esto, el fade a 100, hara lo que te pasa a ti.

Gracias SplinterGU, ya me funcionó, habia puesto solo el frame porque en la wiki leí que cuando uno setea la velocidad del fade a 64, el cambio se hace en un frame. ;D

aveces me pregunto, ¿porque tengo poblemas con lo mas sencillo? jeje.

Esto era verdad cuando las componentes de color variaban entre 0 y 63, o sea, en DIV. Como al usar RGB puedes poner valores entre 0 y 255, 63 es sólo 1/4 de la velocidad máxima, y tardaría 4 frames. Cuidado con eso.
También tienes fade_on y fade_off, que creo que te hacían los fades inmediatos (o a velocidad estandar, no sé, hace años que no las uso ^^U).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)