C ++ - Spielbibliothek für SVG-basiertes Spiel [geschlossen]

8

Ich möchte eine plattformübergreifende Open-Source- Spiel-Engine im 2D-RPG-Stil für ChaiScript entwickeln .

Ich möchte in der Lage sein, alle Grafiken mit SVG zu erstellen und benötige eine Joystick-Eingabe. Ich brauche auch die Bibliotheken, die ich benutze, um Open Source zu sein und mit der BSD-Lizenz kompatibel zu sein.

Ich bin mit Allegro , ClanLib und SDL vertraut . Soweit ich das beurteilen kann, hat keine dieser Bibliotheken eine integrierte oder offensichtliche Integration für SVG. Mir sind auch die vorherigen Gespräche auf dieser Website über Qt für die SVG-Spieleentwicklung bekannt.

Ich hoffe, Qt aufgrund der Größe und Komplexität der Anforderung zu vermeiden. Außerdem scheint Qt keine Unterstützung für Joystick-Eingaben zu haben, was die Verwendung von SDL oder einer anderen Bibliothek erfordern würde.

Meine Frage lässt sich also wie folgt zusammenfassen:

  • Was ist der beste Weg, um SVG- und Joystick-Unterstützung in einer 2D-C ++ - Bibliothek zu erhalten und gleichzeitig die Abhängigkeiten so gering wie möglich zu halten (vorzugsweise Qt insgesamt vermeiden)?
lefticus
quelle
1
Warum Sie brauchen SVG?
AttackingHobo
Ich weiß nicht brauchen SVG, aber es würde das Aussehen helfen bieten und das Gefühl , ich will. Ich möchte, dass die Engine leicht auf viele verschiedene Bildschirmgrößen skalierbar ist und dass der aktive Spielbereich dynamisch gezoomt wird.
Lefticus
1
Wenn Sie viel Skalierung benötigen, ist dies möglicherweise ein guter Weg. Bei SVG oder einem anderen Vektorformat gibt es jedoch einen großen Nachteil: Jedes Objekt benötigt länger zum Zeichnen, je komplexer es ist. Bei Rastergrafiken hängt der größte Teil der Zeichenzeit von der Größe des Objekts und in gewissem Maße von der Anzahl der Transformationen ab.
AttackingHobo
1
Der Grund, warum SVG eine GUTE IDEE (tm) für ein Format ist, das in einer 2D-Vektor-basierten Spiel-Engine verwendet werden kann, kann in einem Wort zusammengefasst werden: Inkscape. Die Wahrheit ist, dass der Code nur die halbe Miete ist. Ohne ein großartiges Tool für die Produktion von Inhalten wird es Ihnen nicht gelingen, alle Spiele außer den kleinsten zu erstellen.
Lennart Rolland
1
Sie können die SVG jederzeit beim Laden zuerst in ein Spritesheet rendern
Sidar

Antworten:

2

Ich sehe keinen Grund, warum Sie SDL oder eine andere Eingabebibliothek mit einer 2D-Grafikbibliothek wie libcairo nicht verwenden konnten .

Was ChaiScript betrifft, haben Sie von Lua gehört ?

bkersten
quelle
Ich habe von Lua gehört. Ich bin einer der Autoren von ChaiScript und möchte an einem Projekt arbeiten, das die Sprache trainiert. Außerdem ist es wesentlich weniger Arbeit, ChaiScript mit C ++ als Lua zu verwenden (Ereignis unter Berücksichtigung von SWIG oder LuaBind).
Lefticus
In Bezug auf libcairo. Es scheint, dass es viel Arbeit und eine erhebliche Anzahl von Abhängigkeiten gibt, um libcairo-Rendering in SDL zu bringen, oder fehlt mir etwas?
Lefticus
Oh, noch etwas. Ich sehe keine Methoden, um eine SVG-Datei tatsächlich zu laden und mit libcairo zu rendern.
Lefticus
SVG ist nur XML. Ich bin sicher, es gibt Bibliotheken zum Lesen von SVG-Dateien, die Ihren Anforderungen entsprechen. Kairo ist jedoch eine schnelle 2D-Grafikbibliothek, die Ihnen den visuellen Stil verleiht, den Sie suchen. Die Verwendung von Cairo mit SDL macht es einfach.
Bkersten
Wenn ich also wirklich auf SVG eingestellt bin und meinen eigenen Renderer nicht rollen möchte, bedeutet das librsvg, für das libcairo erforderlich ist, für das libgdk und libgtk erforderlich sind, und dann sdl für die plattformübergreifende Eingabeverwaltung. Oder einfach nur Qt. Hat jemand aus Neugier Erfahrung mit dem Aufbau einer plattformübergreifenden SVG-basierten Spiel-Engine?
Lefticus
2

Ich bin mit Allegro, ClanLib und SDL vertraut. Soweit ich das beurteilen kann, hat keine dieser Bibliotheken eine integrierte oder offensichtliche Integration für SVG.

Ist es Ihnen jemals in den Sinn gekommen zu fragen ... warum ist das so?

Sicher, SVG ist eine komplizierte Spezifikation, die auf einer grundlegenden Ebene "XML in den Speicher bringen und validieren" implementiert werden muss. Aber ich glaube nicht, dass Sie die einfache Tatsache, dass das SVG-Rendering nicht schnell ist, voll und ganz zu schätzen wissen .

Webbrowser sind schnell, wenn sie eine Webseite in weniger als 500 ms rendern. Das Rendern von SVG-Bildern kann über 20 ms dauern, und das gilt für kleine, einfache Bilder. Etwas, das Sie in einem Spiel finden könnten, ein nicht grafisch-triviales Spiel, wird viel, viel länger dauern . Das Rendern von SVG-Bildern ist nicht für schnelle Animationen gedacht.

Selbst etwas untergeordnetes wie libCairo ist nicht gerade ein Hochleistungs-Renderer. Sicher, es ist schnell genug für einen Browser, aber die Leistung beim Rendern von Software ist nicht gerade beeindruckend.

Kurz gesagt, ich würde SVG komplett fallen lassen und sehen, ob libCairo Ihren Anforderungen gerecht wird. Dies dient nur zu Evaluierungszwecken, um festzustellen, ob es unter Umständen, die in etwa dem von Ihnen beabsichtigten Zweck entsprechen, schnell genug funktioniert. Sobald dies festgelegt ist, können Sie entscheiden, was als nächstes in Bezug auf die Technologie (Qt, SDL, was auch immer) zu tun ist.

Nicol Bolas
quelle
1

In Bezug auf diese SVG ist nicht die beste für die Erzeugung von On-the-Fly-Inhalten und für Echtzeit-Rendering, auch in 2d jedoch ....

Wenn Sie die SVG-Dateien verwenden würden, um Ihren ursprünglichen Inhalt zu erstellen, könnten Sie eine Phase vor der Ebene / Flächengenerierung mit geeignetem Ladebildschirm / Zwischensequenz durchführen, in der Sie den SVG-Inhalt verwenden würden, um Standardbilder mit der von Ihnen benötigten Auflösung zu rendern. Auf diese Weise können Sie einfach mit normalen Bildern codieren, während die Flexibilität des SVG für das Targeting mit mehreren Auflösungen erhalten bleibt. Es ist keine Idee, aber auf diese Weise können Sie die Hardware nutzen, um mit den vorgerenderten Bildern so zu spielen, wie sie entwickelt wurden, anstatt zu versuchen, Inhalte aus SVG-Dateien im laufenden Betrieb zu generieren. Da der Computer nur den Ladebildschirm / die Zwischensequenz anzeigt, können Sie einen großen Teil der verfügbaren Ressourcen für die Generierung der Standardbilder aus SVG verwenden und dies daher schnell und effizient tun.

GMasucci
quelle
0

Irrlicht unterstützt SVG und Joystick

pyirrlicht
quelle
4
Mit einigen Links und weiteren Erklärungen könnte dies eine gute Antwort sein.
MichaelHouse