#16
Hombre, yo de un framework espero cosas que funcionan directamente, y solo hay que poner los detalles de que hay que hacer. Por ejemplo el primer framework que usé hace ya años fue MFC, el framework de Microsoft para programar en Windows antes que que sacasen .net. Con MFC, tu creas un proyecto nuevo, y sin escribir ni una línea de código, tienes algo más o menos así:
Todos los botones de la barra de iconos eran totalmente funcionales, el de abrir, te mostraba la ventana de abrir documentos, y podías seleccionar un archivo (aunque no hacía nada), el de imprimir imprimía la ventana, la barra de estado mostraba lo que hacía cada icono al pasar el ratón por encima, etc. A partir de ahí tú ibas especificando lo que había que hacer con cada operación, y obviamente puedes añadir y quitar iconos, modificar la barra de menús, y todo eso.
Ahora si piensas en un juego, y las cosas típicas que cualquier juego de cualquier género tiene: mapas, npcs, records, pantalla de presentación, cutscenes, etc, si algo no da soporte directo para todo eso, no considero que se pueda decir que es un framework para juegos. Por ejemplo el Source SDK de Valve tiene todo eso, es más, sin escribir una línea de código, simplemente creando un proyecto nuevo del SDK, tienes algo totalmente funcional donde puedes cargar un mapa vacío y moverte en todas direcciones. Si quieres añadir algo al juego, creas una subclase de CBaseAnimating, la inicializas, y automáticamente tienes algo que aparece en el mapa con el modelo 3d que hayas especificado y que colisiona con la física del mapa. Todo el sistema para cambiar de un mapa a otro, para iniciar y terminar la partida, en fin, lo típico que se hace en un juego, está ya hecho y tú lo usas como necesites. Si buscas todo eso en cosas como cocos2d-x o libgdx, es inexistente, lo que tienes es una colección de clases para que las uses como tú veas y te crees tu propio sistema para hacer todas esas cosas.
Normalmente los frameworks funcionan con "hooks", que vienen a ser funciones vacías donde tú pones el código concreto de tú aplicación. Si no escribes nada, tienes una aplicación completamente funcional, que puedes ejecutar y usar, solo que no realiza ninguna tarea concreta. Cada elemento del framework tiene sus propios métodos que funcionan a modo de gancho, así que la forma típica de usar un framework suele ser crear tu propia subclase que hereda del componente del framework que quieres usar, y sobreescribes los métodos que te interesan. Tú ni siquiera controlas cuando se llaman esos métodos, es algo que viene predefinido por el framework.
Vamos que con un framework, más que hacer una aplicación, tienes más la sensación de estar extendiendo una aplicación ya hecha, solo que esa aplicación que extiendes es tan básica, que la puedes convertir un poco en lo que quieras, pero claro eso ya implica que la estructura de la aplicación viene predefinida y es algo que no puedes cambiar.