Estoy construyendo mi propio motor de juego en C ++ y actualmente estoy decidiendo qué interfaz de usuario debo usar.
¿Debo usar una biblioteca? ¿Debo hacer el mío?
Estoy construyendo mi propio motor de juego en C ++ y actualmente estoy decidiendo qué interfaz de usuario debo usar.
¿Debo usar una biblioteca? ¿Debo hacer el mío?
Respuestas:
De hecho, los widgets Qt se pueden integrar con OpenGL y OpenGL se puede integrar fácilmente con Qt (QGLWidget). Por supuesto, los widgets de aspecto nativo de la plataforma pueden no ser exactamente lo que está buscando, pero no se preocupe, hay formas de personalizarlos, crear los suyos o usar algo que se adapte mejor a sus necesidades, como Qt Quick (que deberías poder integrarte también).
Si está interesado, no se pierda estos enlaces: los widgets ingresan a la tercera dimensión: WolfenQt y acelere sus widgets con OpenGL
No creo que debas escribir el tuyo, la tarea de crear un motor de juego es tan enorme en sí misma, si tienes muchas bibliotecas con buenas licencias que podrías usar y modificar a tu gusto.
Para un motor de juego, elegiría una GUI en modo Inmediato. Más información aquí: http://www.mollyrocket.com/forums/viewtopic.php?t=134
La idea clave es dibujar el componente y controlar la interacción al mismo tiempo:
if (button(id, position, size))
{
button_was_pressed();
}
Por un lado, Unity usa un concepto similar.
Puede encontrar una implementación de NVIDIA, utilizada en sus demostraciones: http://code.google.com/p/nvidia-widgets/
Personalmente, recomendaría CEGUI . Es de código abierto y bastante bueno. Sin embargo, lo que debe tener en cuenta es que puede ser muy, muy detallado si escribe todo a mano.
Pero, en el lado positivo, tiene renderizadores para OpenGL y DirectX. Logré ponerlo encima de la plantilla que uso normalmente, que escribe en una textura directamente usando un VBO (es una especie de hacky).
El juego en cuestión era para una asignación de redes. La tarea era tener un juego en red, con un lobby. Sabía que el vestíbulo iba a ser un problema en el cuello, así que elegí una biblioteca que hizo la mayor parte por mí.
El problema con la mayoría de las bibliotecas GUI (Qt es probablemente la más popular de C ++ que no es solo de Windows) es que la mayoría no se integrará bien en un motor. Tradicionalmente en una aplicación GUI, la biblioteca GUI controla el bucle principal y simplemente conecta las devoluciones de llamadas a eventos. En un motor de juego generalmente quieres controlar el ciclo, por lo que puede ser complicado en el mejor de los casos. ¿Quizás está buscando algo que solo maneje los controles de dibujo y los diálogos y tal en un contexto 3D que lo pasa? Esos pueden ser mucho más difíciles de encontrar: - /
Creo firmemente en escribir el tuyo pero, de nuevo, soy muy viejo. Luchar con otra biblioteca GUI para hacer exactamente lo que quieres tiende a volverme loco, sumado al hecho de que la mayoría de las GUI de juegos son bastante triviales, por lo que no tienes que esforzarte al máximo en el diseño MDI y súper OO donde Los botones pueden tener vistas de desplazamiento que se resaltan cuando pasa el mouse sobre una barra de tareas al costado de una casilla de verificación con los pulgares arrastrables, o algo así. Diferentes golpes para diferentes personas, supongo.
Una opción que podría valer la pena investigar es usar WebKit para representar sus interfaces de usuario y hacer toda su interfaz de usuario con CSS / HTML / Javascript.
Aquí hay una implementación de código abierto (Berkelium) , y aquí hay una implementación comercial de código cerrado (Awesomium)
Sugeriría IUP - Interfaz de usuario portátil: http://www.tecgraf.puc-rio.br/iup/
Solo lo he usado con el lenguaje de programación Lua, pero fue muy fácil de usar. Solo viene en sabores C, LED y Lua, pero puedes prepararlo fácilmente.
Personalmente estoy usando CEGUI en mi proyecto de juego, y es una solución bastante robusta. El problema es que, a veces, casi se siente como hacer un pequeño cambio para alterar toneladas de archivos.
No lo he usado, pero libRocket fue completamente gratuito, eliminando todas las tarifas de licencia y lo que no. Lo bueno de esta lib es que la escribes en sintaxis html / css. http://librocket.com
Simplemente planteando una sugerencia interesante, si está desarrollando el juego para Windows, use la API Win32. Simplemente use los controles normales de Windows (recomendaría usar las bibliotecas ATL / WTL) pero hágalos dibujar por el propietario.
Vi que esta técnica se usaba en el primer juego de Unreal Tournament, mientras miraba los encabezados publicados públicamente (para los creadores de mods).
Uno de los beneficios clave para hacer esto es tener toda la infraestructura de la interfaz de usuario de Windows a su disposición, así como mantener las preferencias del usuario para la frecuencia de repetición del teclado, la sensibilidad del mouse, la velocidad de doble clic y otras cosas. Además, si obedece las reglas, la interfaz será rápida y sin parpadeos.
Los inconvenientes son que aún tendrá que escribir algo de código para subclasificar los controles de Windows para hacer que el propietario dibuje y pueda aplicar sus propios gráficos y efectos.
Solo descartando esto como una idea.