¿Qué biblioteca C ++ GUI puede sugerir? [cerrado]

26

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?

Mr Valdez
fuente
3
No está claro a qué te refieres: ¿GUI en el juego? O GUI para herramientas? Cada uno es un requisito muy diferente ..
jacmoe
1
¿Quién necesita herramientas cuando tienes un MOTOR (música épica)
Ricket
1
si solo necesita cuadros de diálogo modales, los cuadros de diálogo de archivos pequeños en sourceforge son un único archivo multiplataforma C C ++ para agregar a su proyecto. no init, no main loop
tinyfiledialogs

Respuestas:

11

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

Palmik
fuente
9

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/

NocturnDragon
fuente
44
La GUI de mensajería instantánea es un concepto interesante, pero he descubierto que surgen algunos problemas cuando intentas hacer cosas divertidas. Si desea que los elementos del menú se animen dentro / fuera, debe hacer algo como modificar la posición individual de todos los widgets, o hacer algo como modificar la matriz de transformación de la GUI para esa llamada. Sería más fácil si tuviera, por ejemplo, un contenedor de Windows cuyas acciones se traducen a sus hijos y tal. Además, por alguna razón, la mayoría de las implementaciones de IMGUI carecen de estados de widget "deshabilitados".
Tetrad
@Tetrad: es muy fácil implementar grupos de widgets con diseños automáticos, posiciones relativas o posiciones absolutas (los widgets de Nvidia lo hacen). Le permite contener widgets muy fácilmente dentro de ventanas o paneles. Para el estado "deshabilitado", no puedo ver por qué esto no se implementaría trivialmente. Para las "cosas de juego", creo que los conceptos de modo inmediato son en realidad más adecuados que el modo retenido, ya que los widgets se actualizan cada cuadro.
Oskar N.
7

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í.

caballero666
fuente
Esto es lo que estoy usando actualmente. Sin embargo, me parece que tiene demasiada dependencia. Y tuve problemas para vincularlo a mi proyecto (IIRC, la licencia decía que solo puedo vincular a la biblioteca)
MrValdez
66
Tiene una cantidad ridícula de dependencias. ¡Infló mi pequeño juego de demostración a 50 MB!
knight666
¿Qué? Creo que lo estás haciendo mal :) El peso de las DLL de CEGUI en mi juego es inferior a 3 MB. Y para MrValdez: CEGUI está bajo la licencia BSD ..
jacmoe
Licencia MIT - lo siento. CEGUI está bajo la licencia MIT. :)
jacmoe
5

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: - /

coderanger
fuente
<pedantic> wxWidgets también es multiplataforma </pedantic> aunque considero su punto de vista sobre la integración del motor
zebrabox
3
Dije "más popular", no "solo" :- P wx tiene aún menos soporte para trabajar con contextos 3D la última vez que miré.
coderanger
4

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.

Kaj
fuente
Hay situaciones en las que "escribir el suyo" no está tan fuera de lugar como se podría pensar. Un juego donde la IU es importante, como juegos de administración o juegos de rol con administración de elementos complejos; la interfaz de usuario sería una gran parte de la experiencia. joelonsoftware.com/articles/fog0000000007.html Si se trata de una función comercial central, hágalo usted mismo,
pase
3

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)

Tétrada
fuente
55
WebKit y sus parientes están más orientados hacia una frecuencia de actualización de una o dos veces por segundo, podría ser difícil hacer un HUD para un juego orientado a la acción de esa manera. Sin embargo, sería genial para menús o bits más lentos.
coderanger
1
@coderanger: puedes escribir juegos completos en JavaScript / HTML5. He publicado un juego de acción comercial para Chrome Web Store que funciona a 60 FPS muy bien en WebKit / Chrome.
Sean Middleditch
3

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.

Dalin Seivewright
fuente
Parece interesante. Lo comprobaré tan pronto como pueda.
MrValdez
3

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

Aidan Knight
fuente
2

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.

Daemin
fuente
1
Creo que win32 / COM es emulado en Vista y Win 7. No recomendado para alto rendimiento ...
Stephen Furlani
Supongo que depende de la cantidad de GUI que usarás en el juego. Si es solo para el sistema de menús, entonces a quién le importa realmente, si lo está utilizando ampliamente en la sección crucial de la velocidad de fotogramas, entonces necesita algo de trabajo y reflexión.
Daemin
@StephenFurlani Win32 / COM no está emulado en Vista y Windows 7, es nativo y a toda velocidad. Además, ATL / WTL no depende de COM, pero DirectX sí.
Daemin