Libreria di giochi C ++ per giochi basati su SVG [chiuso]


8

Sto cercando di costruire un motore di gioco 2D open source multipiattaforma per ChaiScript .

Voglio essere in grado di fare tutta la grafica con SVG e ho bisogno di input da joystick. Ho anche bisogno che le librerie che utilizzo siano open source e compatibili con la licenza BSD.

Conosco allegro , ClanLib e SDL . Per quanto ne so, nessuna di queste librerie ha integrato o ovvia integrazione per SVG. Inoltre, sono a conoscenza delle precedenti conversazioni su questo sito relative allo sviluppo di giochi Qt per SVG.

Spero di evitare Qt a causa delle dimensioni e della complessità di renderlo un requisito. Inoltre, Qt non sembra avere il supporto per l'input del joystick, il che richiederebbe l'utilizzo di SDL o di qualche altra libreria.

Quindi la mia domanda può essere riassunta in questo modo:

  • Qual è il modo migliore per ottenere il supporto SVG e joystick in una libreria 2D C ++ minimizzando il più possibile le dipendenze (preferibilmente evitando del tutto Qt)?

1
Perché hai bisogno di SVG?
Attaccando

Non ho bisogno di SVG, ma aiuterebbe a fornire l'aspetto che desidero. Voglio che il motore sia facilmente scalabile su diverse dimensioni dello schermo, oltre ad avere uno zoom dinamico dell'area di gioco attiva.
lefticus,

1
Se hai bisogno di molti ridimensionamenti, potrebbe essere una buona strada da percorrere. Ma con SVG o qualsiasi altro formato vettoriale, c'è un grande svantaggio, ogni oggetto impiega più tempo a disegnare quanto più complesso è. Mentre con l'arte raster, la maggior parte del tempo di disegno dipende dalla dimensione dell'oggetto e in una certa misura dalla quantità di trasformazioni.
Attaccando

1
Il motivo per cui SVG è una BUONA IDEA (tm) per un formato da utilizzare in un motore di gioco basato su vettori 2D può essere riassunto in una parola: Inkscape. La verità è che il codice è solo metà del gioco. Senza un ottimo strumento per la produzione di contenuti non riuscirai a realizzare tutti i giochi tranne il più piccolo.
Lennart Rolland,

1
Puoi sempre eseguire il rendering dell'SVG su uno spritesheet al primo caricamento
Sidar,

Risposte:


2

Non vedo alcun motivo per cui non sia possibile utilizzare SDL o un'altra libreria di input con una libreria grafica 2D come libcairo .

Per quanto riguarda ChaiScript, hai sentito parlare di Lua ?


Ho sentito parlare di Lua. Sono uno degli autori di ChaiScript e sto puntando a lavorare su un progetto che esercita il linguaggio. Oltre a ciò, è molto meno complicato utilizzare ChaiScript con C ++ e Lua (evento che tiene conto di SWIG o LuaBind).
lefticus,

Per quanto riguarda libcairo. Sembra che ci sia molto lavoro e un numero significativo di dipendenze per ottenere il rendering di libcairo su SDL o mi sto perdendo qualcosa?
lefticus,

Oh, un'altra cosa. Non vedo alcun metodo per caricare effettivamente un file SVG e renderlo con libcairo.
lefticus,

SVG è solo XML. Sono sicuro che ci sono librerie per la lettura di file svg adatti alle tue esigenze. Cairo, tuttavia, è una veloce libreria grafica 2D che ti darebbe lo stile visivo che stai cercando. L'uso di Cairo con SDL lo rende semplice.
Bkersten,

Quindi, se sono davvero impostato su SVG e non voglio lanciare il mio renderer, ciò significherebbe librsvg che richiede libcairo, che richiede libgdk e libgtk e quindi sdl per la gestione dell'input multipiattaforma. O solo Qt. Per curiosità, qualcuno ha esperienza con la costruzione di un motore di gioco basato su SVG che è multipiattaforma?
lefticus,

2

Conosco allegro, ClanLib e SDL. Per quanto ne so, nessuna di queste librerie ha integrato o ovvia integrazione per SVG.

Ti è mai venuto in mente di chiedere ... perché?

Certo, SVG è una specifica complicata da implementare a livello base "ottenere l'XML in memoria e convalidarlo". Ma non credo che apprezzi appieno il semplice fatto che il rendering SVG non è veloce .

I browser Web sono veloci se eseguono il rendering di una pagina Web in meno di 500 ms circa. Il rendering delle immagini in formato SVG può richiedere 20ms + e questo è per quelle piccole e semplici. Qualcosa che potresti trovare in un gioco, un gioco non graficamente banale, richiederà molto, molto più tempo. Il rendering delle immagini in formato SVG non è concepito per l'animazione veloce.

Anche qualcosa di livello inferiore come libCairo non è esattamente un renderer ad alte prestazioni. Certo, è abbastanza veloce per un browser, ma non è esattamente incredibile nelle sue prestazioni di rendering del software.

In breve, vorrei abbandonare completamente SVG e vedere se libCairo può soddisfare le tue esigenze. Questo è solo a scopo di valutazione, per vedere se funziona abbastanza velocemente in circostanze che si avvicinano allo scopo che intendi per loro. Una volta determinato, puoi decidere cosa fare dopo in termini di tecnologia (Qt, SDL, qualunque cosa).


1

Per quanto riguarda questo SVG non è il migliore per la generazione di contenuti al volo e per il rendering in tempo reale, anche in 2D, tuttavia ....

Se dovessi utilizzare i file SVG per creare il tuo contenuto originale, potresti avere una fase di pre-livello / generazione di area con schermata di caricamento / scena di taglio appropriata in cui utilizzeresti il ​​contenuto SVG per eseguire il rendering delle immagini standard della risoluzione di cui hai bisogno, ciò ti consentirebbe di codificare semplicemente con immagini normali, pur mantenendo la flessibilità dell'SVG per il targeting multi-risoluzione. Non è un'idea, ma in questo modo puoi sfruttare l'hardware per giocare con le immagini prerendered nel modo in cui è stato progettato, piuttosto che cercare di generare al volo contenuti da file SVG. Poiché il computer visualizzerebbe solo la schermata di caricamento / cut-scene, è possibile dedicare un'enorme percentuale di risorse disponibili alla generazione delle immagini standard da SVG e quindi farlo in modo rapido ed efficiente.


0

Irrlicht ha il supporto SVG e joystick


4
Con alcuni link e ulteriori spiegazioni questa potrebbe essere una buona risposta.
MichaelHouse
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.