Autor Tema: Función Main  (Leído 1276 veces)

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 354
  • Karma: 13
    • 5Leaps
Función Main
« en: Febrero 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!
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

panreyes

  • Administrator
  • *****
  • Mensajes: 2233
  • Karma: 81
    • panreyes.com
Re:Función Main
« Respuesta #1 en: Febrero 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

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12882
  • Karma: 377
Re:Función Main
« Respuesta #2 en: Febrero 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...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 354
  • Karma: 13
    • 5Leaps
Re:Función Main
« Respuesta #3 en: Febrero 28, 2019, 08:33:20 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
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

panreyes

  • Administrator
  • *****
  • Mensajes: 2233
  • Karma: 81
    • panreyes.com
Re:Función Main
« Respuesta #4 en: Febrero 28, 2019, 09:19:04 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...

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 354
  • Karma: 13
    • 5Leaps
Re:Función Main
« Respuesta #5 en: Febrero 28, 2019, 12:29:01 pm »
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 :)
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

panreyes

  • Administrator
  • *****
  • Mensajes: 2233
  • Karma: 81
    • panreyes.com
Re:Función Main
« Respuesta #6 en: Febrero 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é :)

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6334
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:Función Main
« Respuesta #7 en: Junio 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
Código: [Seleccionar]
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.
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)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12882
  • Karma: 377
Re:Función Main
« Respuesta #8 en: Junio 10, 2019, 02:30:24 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
Código: [Seleccionar]
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
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6334
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:Función Main
« Respuesta #9 en: Junio 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
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)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12882
  • Karma: 377
Re:Función Main
« Respuesta #10 en: Junio 10, 2019, 02:46:21 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
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6334
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:Función Main
« Respuesta #11 en: Junio 10, 2019, 03:45:34 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.
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)