Bibliothèque de jeux C ++ pour les jeux basés sur SVG [fermé]

8

Je cherche à créer un moteur de jeu de style RPG 2D open source multiplateforme pour ChaiScript .

Je veux pouvoir faire tous les graphiques avec SVG et avoir besoin d'une entrée par joystick. J'ai également besoin que les bibliothèques que j'utilise soient open source et compatibles avec la licence BSD.

Je connais allegro , ClanLib et SDL . Pour autant que je sache, aucune de ces bibliothèques n'a intégré ou une intégration évidente pour SVG. De plus, je suis au courant des conversations précédentes sur ce site concernant Qt pour le développement de jeux SVG.

J'espère éviter Qt en raison de la taille et de la complexité d'en faire une exigence. De plus, Qt ne semble pas avoir de prise en charge du joystick, ce qui nécessiterait l'utilisation de SDL ou d'une autre bibliothèque.

Donc, ma question peut se résumer comme suit:

  • Quelle est la meilleure façon d'obtenir le support SVG et joystick dans une bibliothèque 2D C ++ tout en minimisant autant que possible les dépendances (en évitant de préférence Qt)?
lefticus
la source
1
Pourquoi avez-vous besoin de SVG?
AttackingHobo
Je n'ai pas besoin de SVG, mais cela aiderait à donner l'apparence que je veux. Je veux que le moteur soit facilement évolutif à de nombreuses tailles d'écran différentes, en plus d'avoir un zoom dynamique de la zone de jeu active.
lefticus
1
Si vous avez besoin de beaucoup de mise à l'échelle, cela pourrait être une bonne façon de procéder. Mais avec SVG ou tout autre format vectoriel, il y a un gros inconvénient, chaque objet prend plus de temps à dessiner plus il est complexe. Avec l'art raster, la plupart du temps de dessin dépend de la taille de l'objet et, dans une certaine mesure, de la quantité de transformations.
AttackingHobo
1
La raison pour laquelle SVG est une BONNE IDÉE (tm) pour un format à utiliser dans un moteur de jeu basé sur un vecteur 2D peut être résumée en un mot: Inkscape. La vérité est que le code n'est que la moitié du jeu. Sans un excellent outil de production de contenu, vous ne réussirez pas à créer tous les jeux, sauf le plus petit.
Lennart Rolland du
1
Vous pouvez toujours rendre le SVG à une feuille de sprites en premier lors du chargement
Sidar

Réponses:

2

Je ne vois aucune raison pour laquelle vous ne pourriez pas utiliser SDL ou une autre bibliothèque d'entrée avec une bibliothèque graphique 2D comme libcairo .

Quant à ChaiScript, avez-vous entendu parler de Lua ?

bkersten
la source
J'ai entendu parler de Lua. Je suis l'un des auteurs de ChaiScript et vise à travailler sur un projet qui exerce le langage. En plus de cela, il est beaucoup moins de travail d'utiliser ChaiScript avec C ++ puis Lua (événement prenant en compte SWIG ou LuaBind).
lefticus
Concernant libcairo. Il semble qu'il y ait beaucoup de travail et un nombre important de dépendances pour obtenir le rendu de libcairo en SDL, ou est-ce que je manque quelque chose?
lefticus
Oh, encore une chose. Je ne vois aucune méthode pour réellement charger un fichier SVG et le rendre avec libcairo.
lefticus
SVG est juste XML. Je suis sûr qu'il existe des bibliothèques de lecture de fichiers svg qui répondraient à vos besoins. Le Caire est cependant une bibliothèque graphique 2D rapide qui vous donnerait le style visuel que vous recherchez. L'utilisation du Caire avec SDL simplifie la tâche .
bkersten
Donc, si je suis vraiment réglé sur SVG et que je ne veux pas lancer mon propre moteur de rendu, cela signifierait librsvg qui nécessite libcairo, qui nécessite libgdk et libgtk puis sdl pour la gestion des entrées multiplateformes. Ou tout simplement Qt. Par curiosité, quelqu'un a-t-il de l'expérience dans la construction d'un moteur de jeu basé sur SVG qui est multiplateforme?
lefticus
2

Je connais allegro, ClanLib et SDL. Pour autant que je sache, aucune de ces bibliothèques n'a intégré ou une intégration évidente pour SVG.

Vous est-il déjà venu à l'esprit de demander ... pourquoi?

Bien sûr, SVG est une spécification compliquée à implémenter au niveau de base "obtenir le XML en mémoire et le valider". Mais je ne pense pas que vous appréciez pleinement le simple fait que le rendu SVG n'est pas rapide .

Les navigateurs Web sont rapides s'ils affichent une page Web en moins de 500 ms environ. Le rendu des images SVG peut prendre 20 ms +, et c'est pour les petites et simples. Quelque chose que vous pourriez trouver dans un jeu, un jeu non trivial graphiquement, va prendre beaucoup, beaucoup plus de temps. Le rendu d'image SVG n'est pas destiné à une animation rapide.

Même quelque chose de niveau inférieur comme libCairo n'est pas exactement un moteur de rendu hautes performances. Bien sûr, il est assez rapide pour un navigateur, mais il n'est pas exactement flamboyant dans ses performances de rendu logiciel.

En bref, je laisserais tomber SVG entièrement et verrais si libCairo peut répondre à vos besoins. C'est juste à des fins d'évaluation, pour voir si cela fonctionne assez rapidement dans des circonstances qui correspondent à l'objectif que vous avez prévu pour elles. Une fois cela déterminé, vous pouvez décider quoi faire ensuite en termes de technologie (Qt, SDL, peu importe).

Nicol Bolas
la source
1

En ce qui concerne ce SVG n'est pas le meilleur pour générer du contenu à la volée et pour le rendu en temps réel, même en 2D, cependant ....

Si vous deviez utiliser les fichiers SVG pour créer votre contenu original, vous pourriez alors avoir une phase de génération de pré-niveau / zone avec un écran de chargement / une scène de coupe approprié où vous utiliseriez le contenu SVG pour rendre des images standard de la résolution dont vous avez besoin, cela vous permettrait de coder simplement avec des images normales, tout en conservant la flexibilité du SVG pour le ciblage multi-résolution. Ce n'est pas une idée, mais de cette façon, vous pouvez tirer parti du matériel pour jouer avec les images pré-rendues de la façon dont il a été conçu, plutôt que d'essayer de générer du contenu à la volée à partir de fichiers SVG. Comme l'ordinateur n'afficherait que l'écran de chargement / la scène de coupe, vous pourriez consacrer une énorme proportion des ressources disponibles à la génération des images standard à partir de SVG et donc le faire de manière rapide et efficace.

GMasucci
la source
0

Irrlicht a un support SVG et joystick

pyirrlicht
la source
4
Avec quelques liens et des explications supplémentaires, cela pourrait être une bonne réponse.
MichaelHouse