Bennu Game Development

Foros en Español => Sugerencias => Topic started by: Arcontus on February 27, 2019, 05:46:48 PM

Title: Función Main
Post by: Arcontus on February 27, 2019, 05:46:48 PM
Hola chicos,

estaba yo pensando en las similitudes entre Unreal Engine con sus blueprints (no en las diferencias que son demasiadas) y tiene gracia por que en cierto modo se asemejan.

Un objeto pintado en pantalla es en Bennu un proceso, en UE en ultima instancia también, sin entrar en detalles tiene sus coordenadas, su grafico y su programación encapsulada con sus loops.

Si quieres que algo se ejecute o bien lo metes en un objeto (que es lo mas normal) o en el blueprint del nivel, algo similar al main de bennu.

Y aquí viene una gran diferencia de Bennu con Unreal (una de tantisimas claro), en UE no puedes detener el main del nivel... bueno, a no ser que tengas una muy buena razón, por que esto finalizaría todo. Algo así como un exit(); en Bennu. Pero en Bennu si puedes cargarte el Main y dejar otro proceso con un loop que mantenga el programa abierto.

Bien, pues estó que hace bennu para mi es más un engorro que una feature no se si me explico. El hecho de que tengas una función con loop no debería evitar que al cerrarse main se cerrara todo, y esto simplificaría unas cuantas cosas, sobretodo cuando se hacen pruebas.

Desconozco si muchos de vosotros usais main para lanzar vuestros procesos y dejais morir main y seguís con el programa con procesos hijos de main,... pero a mi entender esta feo.

Esto más que una sugerencia es más un debate abierto sobre preferencias de cada uno:

¿Dejas morir main mientras se ejecutan tus proyectos?

Un saludo!
Title: Re:Función Main
Post by: panreyes on February 27, 2019, 07:17:03 PM
Sí. No es programación estructurada, sino caos, y el caos lo permite.

main()
-> cargo todos los recursos
-> main_menu()
fin del main

main menu -> juego -> game over -> main menu
Title: Re:Función Main
Post by: SplinterGU on February 28, 2019, 03:02:17 AM
si quieres que cuando termine el main termine la ejecucion de bennugd, pon un let_me_alone(); antes de salir... y listo...
Title: Re:Función Main
Post by: Arcontus on February 28, 2019, 08:33:20 AM
Quote from: SplinterGU on February 28, 2019, 03:02:17 AM
si quieres que cuando termine el main termine la ejecucion de bennugd, pon un let_me_alone(); antes de salir... y listo...
Eso es lo que hago yo. Usar main con un loop principal para cada estado, pantalla o menu y un let_me_alone(); como dice Splinter. De esta manera centralizo en un solo proceso aquellas cosas que necesite controlar en tiempo de ejecución delimitado a cada estado. Ejemplo algunos "cheats" o parametros de debug.

Main ->Splash -> Main -> Intro -> Main -> Menu principal -> Main -> Juego -> Main -> Menu principal -> Main -> Salir
Title: Re:Función Main
Post by: panreyes on February 28, 2019, 09:19:04 AM
Quote from: Arcontus on February 28, 2019, 08:33:20 AM
Eso es lo que hago yo. Usar main con un loop principal para cada estado, pantalla o menu y un let_me_alone(); como dice Splinter. De esta manera centralizo en un solo proceso aquellas cosas que necesite controlar en tiempo de ejecución delimitado a cada estado. Ejemplo algunos "cheats" o parametros de debug.

Main ->Splash -> Main -> Intro -> Main -> Menu principal -> Main -> Juego -> Main -> Menu principal -> Main -> Salir

Yo eso de los cheats o parámetros de debug, lo hago con un proceso que tengo siempre en marcha que me sirve para diferentes cosas: trucos, debug, capturas, comprobar exit_status, salir con alt+x, etc...
Title: Re:Función Main
Post by: Arcontus on February 28, 2019, 12:29:01 PM
Quote from: panreyes on February 28, 2019, 09:19:04 AM
Quote from: Arcontus on February 28, 2019, 08:33:20 AM
Eso es lo que hago yo. Usar main con un loop principal para cada estado, pantalla o menu y un let_me_alone(); como dice Splinter. De esta manera centralizo en un solo proceso aquellas cosas que necesite controlar en tiempo de ejecución delimitado a cada estado. Ejemplo algunos "cheats" o parametros de debug.

Main ->Splash -> Main -> Intro -> Main -> Menu principal -> Main -> Juego -> Main -> Menu principal -> Main -> Salir

Yo eso de los cheats o parámetros de debug, lo hago con un proceso que tengo siempre en marcha que me sirve para diferentes cosas: trucos, debug, capturas, comprobar exit_status, salir con alt+x, etc...
Yo inicialmente hice lo que tu, pero luego pense... si ya tengo el main para que otro proceso... y por eso uso main :)
Title: Re:Función Main
Post by: panreyes on February 28, 2019, 01:08:19 PM
Para poder relanzar el proceso residente en caso de let_me_alone perezoso sin cargar todos los recursos xD

Hay que aprovechar las ventajas del lenguaje, sino paqué :)
Title: Re:Función Main
Post by: Drumpi on June 10, 2019, 01:24:49 PM
Pues yo el main, lo único que lo uso, es para llamar al proceso principal del programa... y si acaso para hacer el seteo de pantalla. Después le pongo un
while(!key(_esc)) frame; end
let_me_alone();


a modo de botón de hard-shutdown mientras estoy con el debug... aunque luego se me olvida quitarlo.

De todas formas, si queremos ser puristas, es normal que Bennu funcione así: son procesos, hilos de ejecución diferente. Si cortas un hilo, el resto sigue funcionando. Lo que pasa es que si en un programa hecho en C eliminas el main, lo que te queda es una aplicación trabajando en segundo plano, y en el peor de los casos, un proceso huérfano.
Title: Re:Función Main
Post by: SplinterGU on June 10, 2019, 02:30:24 PM
Quote from: Drumpi on June 10, 2019, 01:24:49 PM
Pues yo el main, lo único que lo uso, es para llamar al proceso principal del programa... y si acaso para hacer el seteo de pantalla. Después le pongo un
while(!key(_esc)) frame; end
let_me_alone();


a modo de botón de hard-shutdown mientras estoy con el debug... aunque luego se me olvida quitarlo.

De todas formas, si queremos ser puristas, es normal que Bennu funcione así: son procesos, hilos de ejecución diferente. Si cortas un hilo, el resto sigue funcionando. Lo que pasa es que si en un programa hecho en C eliminas el main, lo que te queda es una aplicación trabajando en segundo plano, y en el peor de los casos, un proceso huérfano.

no era que desaconsejabas el uso de let_me_alone???!!! xD
Title: Re:Función Main
Post by: Drumpi on June 10, 2019, 02:41:59 PM
Sí, siempre lo digo, no se debe usar nunca. Se deben tener controlados todos los IDs de procesos activos en el programa.
Son buenas prácticas. :D

Ahora, yo soy un atrevido que vive al borde de las normas, y las rompe si es preciso.

Nota: es la única excepción que hago, un botón grande y rojo que sirve para abortar en caso de emergencia... no exento de riesgos. Yo aquí confío en tu buen hacer, maese SplinterGU, y que si se cierran todos los procesos de golpe y se sale del programa, la memoria va a quedar liberada de cualquier recurso cargado o reservado, al cerrar BennuGD :D
Title: Re:Función Main
Post by: SplinterGU on June 10, 2019, 02:46:21 PM
Quote from: Drumpi on June 10, 2019, 02:41:59 PM
Sí, siempre lo digo, no se debe usar nunca. Se deben tener controlados todos los IDs de procesos activos en el programa.
Son buenas prácticas. :D

Ahora, yo soy un atrevido que vive al borde de las normas, y las rompe si es preciso.

Nota: es la única excepción que hago, un botón grande y rojo que sirve para abortar en caso de emergencia... no exento de riesgos. Yo aquí confío en tu buen hacer, maese SplinterGU, y que si se cierran todos los procesos de golpe y se sale del programa, la memoria va a quedar liberada de cualquier recurso cargado o reservado, al cerrar BennuGD :D

de eso confia en el OS... xD
Title: Re:Función Main
Post by: Drumpi on June 10, 2019, 03:45:34 PM
Quote from: SplinterGU on June 10, 2019, 02:46:21 PM
Quote from: Drumpi on June 10, 2019, 02:41:59 PM
Sí, siempre lo digo, no se debe usar nunca. Se deben tener controlados todos los IDs de procesos activos en el programa.
Son buenas prácticas. :D

Ahora, yo soy un atrevido que vive al borde de las normas, y las rompe si es preciso.

Nota: es la única excepción que hago, un botón grande y rojo que sirve para abortar en caso de emergencia... no exento de riesgos. Yo aquí confío en tu buen hacer, maese SplinterGU, y que si se cierran todos los procesos de golpe y se sale del programa, la memoria va a quedar liberada de cualquier recurso cargado o reservado, al cerrar BennuGD :D

de eso confia en el OS... xD

¡¡¿QUE?!! ¿EN WINDOWS? ¡¡¡NUUUUU!!!, LIBERAR, LIBERAAAAAAR.