Biblioteca de juegos C ++ para juegos basados ​​en SVG [cerrado]

8

Estoy buscando construir un motor de juegos de estilo 2D RPG de código abierto multiplataforma para ChaiScript .

Quiero poder hacer todos los gráficos con SVG y necesito la entrada del joystick. También necesito que las bibliotecas que utilizo sean de código abierto y compatibles con la licencia BSD.

Estoy familiarizado con allegro , ClanLib y SDL . Por lo que puedo decir, ninguna de estas bibliotecas tiene una integración integrada o obvia para SVG. Además, estoy al tanto de las conversaciones anteriores en este sitio sobre Qt para el desarrollo de juegos SVG.

Espero evitar Qt debido al tamaño y la complejidad de hacer que sea un requisito. Además, Qt no parece tener soporte de entrada de joystick, lo que requeriría que también se use SDL o alguna otra biblioteca.

Entonces mi pregunta se puede resumir así:

  • ¿Cuál es la mejor manera de obtener compatibilidad con SVG y joystick en una biblioteca 2D C ++ mientras se minimizan las dependencias tanto como sea posible (preferiblemente evitando Qt por completo)?
lefticus
fuente
1
¿Por qué necesitas SVG?
AttackingHobo
No necesito SVG, pero ayudaría a proporcionar la apariencia que quiero. Quiero que el motor sea fácilmente escalable a muchos tamaños de pantalla diferentes, además de tener un zoom dinámico del área de juego activa.
lefticus
1
Si necesita mucho escalado, esa podría ser una buena manera de hacerlo. Pero con SVG o cualquier otro formato de vector, hay un gran inconveniente, cada objeto tarda más en dibujar cuanto más complejo es. Mientras que con el arte ráster, la mayor parte del tiempo de dibujo depende del tamaño del objeto y, en cierta medida, de la cantidad de transformaciones.
AttackingHobo
1
La razón por la cual SVG es una BUENA IDEA (tm) para que un formato se use en un motor de juego basado en vectores 2D se puede resumir en una palabra: Inkscape. La verdad es que el código es solo la mitad del juego. Sin una gran herramienta para la producción de contenido, no tendrás éxito en hacer todos los juegos excepto los más pequeños.
Lennart Rolland
1
Siempre puede renderizar el SVG en una hoja de sprites primero en carga
Sidar

Respuestas:

2

No veo ninguna razón por la que no pueda usar SDL u otra biblioteca de entrada con una biblioteca de gráficos 2D como libcairo .

En cuanto a ChaiScript, ¿has oído hablar de Lua ?

Bkersten
fuente
He oído hablar de Lua. Soy uno de los autores de ChaiScript y mi objetivo es trabajar en un proyecto que ejercite el lenguaje. Además de eso, es mucho menos trabajo usar ChaiScript con C ++ y luego Lua (evento teniendo en cuenta SWIG o LuaBind).
lefticus
En cuanto a libcairo. Parece que hay mucho trabajo y una gran cantidad de dependencias para obtener el renderizado de libcairo a SDL, ¿o me falta algo?
lefticus
Oh, otra cosa. No veo ningún método para cargar realmente un archivo SVG y renderizarlo con libcairo.
lefticus
SVG es solo XML. Estoy seguro de que hay bibliotecas para leer archivos svg que se adaptarían a sus necesidades. Sin embargo, Cairo es una biblioteca de gráficos 2D rápida que le daría el estilo visual que busca. Usar Cairo con SDL hace que parezca simple.
bkersten
Entonces, si realmente estoy configurado en SVG y no quiero rodar mi propio renderizador, eso significaría librsvg que requiere libcairo, que requiere libgdk y libgtk y luego sdl para la administración de entrada de plataforma cruzada. O simplemente Qt. Por curiosidad, ¿alguien tiene experiencia en la construcción de un motor de juego basado en SVG que sea multiplataforma?
lefticus
2

Estoy familiarizado con allegro, ClanLib y SDL. Por lo que puedo decir, ninguna de estas bibliotecas tiene una integración integrada o obvia para SVG.

¿Alguna vez se te ha ocurrido preguntar ... por qué?

Claro, SVG es una especificación complicada para implementar en un nivel básico de "llevar el XML a la memoria y validarlo". Pero no creo que aprecies completamente el simple hecho de que el renderizado SVG no es rápido .

Los navegadores web son rápidos si representan una página web en menos de 500 ms. Las imágenes SVG pueden tardar más de 20 ms en renderizarse, y eso es para las pequeñas y simples. Algo que puedas encontrar en un juego, un juego no gráficamente trivial, llevará mucho, mucho más tiempo. La representación de imágenes SVG no está pensada para una animación rápida.

Incluso algo de nivel inferior como libCairo no es exactamente un procesador de alto rendimiento. Claro, es lo suficientemente rápido para un navegador, pero no es exactamente sorprendente en su rendimiento de representación de software.

En resumen, abandonaría SVG por completo y vería si libCairo puede satisfacer sus necesidades. Eso es solo para fines de evaluación, para ver si funciona lo suficientemente rápido en circunstancias que se aproximan al propósito que tiene previsto para ellos. Una vez que se determina, puede decidir qué hacer a continuación en términos de tecnología (Qt, SDL, lo que sea).

Nicol Bolas
fuente
1

Sin embargo, en lo que respecta a este SVG no es el mejor para generar contenido sobre la marcha y para la representación en tiempo real, incluso en 2d ...

Si usara los archivos SVG para crear su contenido original, entonces podría tener una fase de generación de nivel / área previa con una pantalla de carga / escena de corte apropiada donde usaría el contenido SVG para representar imágenes estándar de la resolución que necesita, esto le permitiría codificar simplemente con imágenes normales, al tiempo que conserva la flexibilidad del SVG para la orientación de resolución múltiple. No es una idea, pero de esta manera puede aprovechar el hardware para jugar con las imágenes prerrepresentadas de la manera en que fue diseñado, en lugar de tratar de generar contenido sobre la marcha a partir de archivos SVG. Como la computadora solo mostraría la pantalla de carga / escena de corte, podría dedicar una gran proporción de los recursos disponibles a generar las imágenes estándar desde SVG y, por lo tanto, hacerlo de manera rápida y eficiente.

GMasucci
fuente
0

Irrlicht tiene soporte SVG y joystick

pyirrlicht
fuente
44
Con algunos enlaces y más explicaciones, esta podría ser una buena respuesta.
MichaelHouse