Piero V.

Panda3D: distribuire giochi in C++ su Windows

Vi ho parlato più di una volta di Panda3D: un motore per giochi libero e multipiattaforma.

Finora però ho sempre parlato di problemi pratici riguardanti la programmazione, ma non ho mai parlato del problema della compilazione e della distribuzione, che invece sono molto importanti.

Le due piattaforme supportate principalmente da Panda sono Windows e GNU Linux.

Per la compilazione su GNU Linux non ci sono problemi, basta avere il compilatore GNU fare copia e incolla dalla pagina di Panda e si è a posto. Non escludo che comunque magari anche altri compilatori funzionino.

Su Windows si è invece costretti a usare Visual C++ 2008. Per usare la versione 2010 bisognerebbe ricompilarsi tutto Panda.

Io l’ho utilizzato per la prima volta ieri, comunque il tutto è abbastanza facile. Anche in questo caso basta seguire le istruzioni di Panda3D. Per le directory comunque vi consiglio di non metterle globali ma solo al progetto. Per farlo bisogna andare su Proprietà, Linker, Generale, Directory di include aggiuntiva (vado a memoria) e mettere C:\Panda3D-vers\python\include e C:\Panda3D-vers\include (sostituendo a vers la vostra versione). Per mettere la directory delle librerie invece dovete avere almeno un file C++ nel progetto, anche vuoto. Allora nella voce delle proprietà diventerà disponibile anche la scheda C/C++, in cui potrete andare ad inserire, mi pare in generale, le directory C:\Panda3D-vers\python\libs e C:\Panda3D-vers\lib. Magari quando ho un po’ di tempo controllo. Per ulteriori informazioni guardate questa pagina.

Comunque sia il codice fortunatamente è altamente portabile (ci pensa Panda a fare tutto) e perciò non avrete problemi se volete avere entrambe le piattaforme. Tuttavia a me il compilatore Microsoft ha segnalato qualche errore che il compilatore GNU non segnalava, comunque errori di poco conto.

Una volta compilato rimane il problema della distribuzione.

Per Linux in realtà ognuno ha il proprio metodo, perciò lo tralascerò, mentre per Windows, dove dovete dare tutte le librerie voi, vi dico come ho fatto io.

Ho utilizzato l’utility packpanda che crea un NSIS installer (su Windows, su Debian un .deb e su Red Hat un .rpm). Se scrivete come me tutto in C++, potreste avere un problema, e cioè che questo programma vuole un file main.py, anche se voi non usate per niente python. Per risolverlo basta crearne uno vuoto.

Per creare l’installer date packpanda --dir miadirectorydelgioco --fast. Mi raccomando, non create il pacchetto all’interno della directory del gioco, altrimenti va in ricorsione infinita.

Sul sito di Panda danno molte istruzioni per personalizzare il pacchetto. Voi non praticatele, perché in realtà noi non useremo questo installer. Ci servirà solo per avere le dipendenze consigliate da Panda. Perciò, una volta finito di creare il pacchetto, estraete le cartelle bin, etc e i vostri file. Gli altri non servono. Per eseguire questo passo si può benissimo utilizzare 7-Zip.

La directory bin contiene tutte le librerie. In realtà ha anche librerie che potrebbero risultare non strettamente essenziali per il vostro gioco.

La directory etc contiene la configurazione di default. È essenziale che esistano, altrimenti il gioco non si avvierà.

Una volta effettuati questi passi, avrete ottenuto il vostro gioco completo. Tuttavia non è detto che si avvii: la directory bin dovrebbe essere nella path. O la aggiungete alla vostra variabile di sistema, oppure, se come me preferite avere un gioco standalone, fate un batch per avviarlo che imposti la path, o meglio ancora uno script in qualche linguaggio di programmazione. Io per esempio ne ho fatto uno in AutoIt.

Una volta compiuto quest’ultimo passo, si può creare installer.

Buon gaming 😊