2012-06-04 17 views
6

Como hobby, he estado trabajando en la reconstrucción de un videojuego antiguo, y quiero evitar reinventar la rueda siempre que sea posible. El juego está basado principalmente en GUI, pero la GUI necesita ser personalizada en términos de apariencia, y también necesita trabajar con 3D OpenGL para algunas pantallas de juego.Qt library for 2D/3D game development

Para darles una idea, aquí está una captura de pantalla del prototipo inicial:

enter image description here

Hay una gran cantidad de animación utilizada y 3D también, pero los widgets de interfaz gráfica de usuario se comportan de manera muy parecida a la de una norma aplicación de escritorio.

Hasta ahora, he estado usando mi propia biblioteca GUI (no es robusta o completa, y he estado teniendo algunos problemas).

He estado considerando migrar a Qt dada su reputación y características impresionantes, y algunas de las bonitas capturas de pantalla en el sitio web de Qt. Pero nunca antes había usado Qt, así que realmente no tengo una idea de lo que es capaz de hacer, o qué tipo de inversión de tiempo se requeriría para aprenderlo. (Nota que he usado FLTK).

Mi pregunta es: ¿sería posible/práctico usar Qt en esta situación?

ACTUALIZACIÓN: Después de burlar algunas pantallas de juego en Qt, he decidido no usarlo. Aunque es compatible con muchas de las funciones que necesito desde el primer momento (especialmente a través de Hojas de estilo), necesito admitir fuentes preimpresas personalizadas basadas en mapas de bits (no puedo convertirlas ni reemplazarlas). Y no puedo subclasificar QFont, o volver a implementarlo sin que se rompa en futuras versiones de Qt. Dicho esto, quedé muy impresionado con Qt (tanto por su facilidad de uso como por su buena documentación). Tomaré prestadas algunas de sus características para mi propio motor. Gracias a todos los que contribuyeron.

+1

La respuesta simple es sí, es posible/práctico usar Qt en esta situación. Para obtener una respuesta más efectiva, puede considerar hacer una pregunta más detallada o enumerar algunas de las dudas que pueda tener sobre Qt. – Brady

+1

Eche un vistazo a la arquitectura 'QGraphicsView' /' QGraphicsScene', debería estar cerca de lo que busca. – cmannett85

+0

Gracias chicos. Bueno, nunca he usado Qt, así que mi principal preocupación es pasar mucho tiempo aprendiéndolo para descubrir que no puedo hacer lo que necesito. La clase QGraphicsView parece ser compatible con algunas de las características que necesito. Otra característica de ejemplo que necesito es botones no rectangulares, p. Ej. con bordes inclinados (mi código actual usa una máscara de imagen para aceptar/rechazar eventos del mouse). ¿Qt fácilmente permitirá tales hazañas? – QuasarDonkey

Respuesta

4

Es difícil saber todo lo que su juego necesita hacer basado en una captura de pantalla; sin embargo, haré eco de los sentimientos de otros carteles aquí y proporcionaré un par de avenidas para que usted los vea.

Una, es que es posible que desee considerar QtQuick sobre GraphicsView Framework, pero esto REALMENTE depende de lo que necesita hacer. Solo quiero arrojarlo como una alternativa para que no te lo pierdas. Este tutorial usa QtQuick para armar un juego de estilo de conexión cuatro con una apariencia elegante. Esto puede ser más simple de lo que usted desea, pero de nuevo, tal vez no, depende de lo que necesite hacer.

En segundo lugar, antes de escribir eventos personalizados de pintura para todos sus botones, consideraría usar Qt Style Sheets y diseñar sus widgets en una sintaxis similar a CSS. Esto le permitirá cambiar la apariencia de su GUI de una manera muy flexible y rápida. En función de su captura de pantalla, creo que puede obtener lo que desea de las hojas de estilo mucho más rápido que la creación de subclases y su propia configuración. Pero una vez más, es difícil saberlo en base a una captura de pantalla.Here es un ejemplo de una GUI oscura y naranja que se implementó utilizando solo Qt Style Sheets. La propiedad border-radius de la hoja de estilo QPushButton le daría los botones redondeados (ref).

+0

Sí, ya me encontré con las hojas de estilo. La propiedad 'border-image' parece proporcionar la mayor parte de la funcionalidad del tema que necesitaré, ya que estoy usando sobre todo imágenes pre-renderizadas para todo (¿y con suerte también podría hacer animaciones?). Será especialmente útil ya que el juego es compatible con múltiples imperios jugables, cada uno tiene un aspecto diferente. Con respecto a los botones redondeados, las imágenes ya son redondas, solo quiero restringir los clics del mouse al área. QWidget :: setMask() lo hará. Veré QtQuick. – QuasarDonkey

+0

Sí, pero con las hojas de estilo parece que no * necesita * imágenes para sus botones, ¿verdad? Podría escribir el estilo y luego los cambios/modificaciones en la interfaz de usuario (al menos en términos de botones) son mucho más fáciles. Por otra parte, no conozco su flujo de trabajo, así que haga lo que más le convenga, seguro. Si está pensando en usar propiedades de animación (a la CSS), no creo que vaya a obtener eso con Qt Style Sheets. Que yo sepa, tendrá que usar el Marco de Vista de Gráficos o el Marco de Animación (y/o una combinación de ambos) para obtener una buena animación. ¡Buena suerte! –

1

La respuesta simple se ha dado más arriba pero para arrojar algunos pensamientos más en: sí, es posible, probablemente no tenga que luchar demasiado contra Qt. En su mayor parte, el consejo recomendado para ir a widgets muy personalizados como ese es la subclase e implementó el evento de pintura usted mismo.

Puede utilizar una carga de primitivas de dibujo básicas para obtener las formas básicas de los elementos y expandir desde allí. De hecho, hay un par de preguntas aquí con muy buenos recursos sobre cómo hacerlo.

+0

Sí, estaba pensando eso. Según lo que he visto en la API, será bastante fácil subclasar widgets para obtener la apariencia exacta que quiero, p. Ej. anulando QButton :: drawButton() y similares. – QuasarDonkey