0
Apr 11 2012

Flying Boxes

Volevo presentarvi Flying Boxes, un gioco fatto da un mio amico lunedì notte in sole 9 ore e poi perfezionato in martedì e oggi.

È un gioco in terza persona: voi mandate a destra e sinistra un aereo, il quale deve schivare le casse di legno.

Vi spostate con i tasti direzionali: sinistra e destra spostate l’aereo, con la freccia in su date il “turbo”, ovvero aumentate la velocità di molto.

Il gioco è multipiattaforma (è fatto in python con Panda3d), però vi linko il setup per Windows.

In ogni caso se volete potete giocare anche con le altre piattaforme, basta installare Panda3D ed estrarre dal setup game/main.py, e le cartelle $_OUTPUT_DIR/models e $_OUTPUT_DIR/images (magari con 7zip).

Download del setup (mirror)

0
Apr 07 2012

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… [Leggi il resto...]

0
Mar 20 2012

Panda3D e Broadcast

Tempo fa avevo cercato di creare la parte di networking per un videogioco che utilizza il motore Panda3D.

I giochi hanno bisogno di aggiornare velocissimamente le posizioni degli altri giocatori e tutti gli altri dati, perciò si usa UDP, un protocollo che è molto più veloce del TCP perché non fa controlli per vedere se sono arrivati i dati (e perciò è anche meno affidabile, ma non importa per un videogioco).

Una delle caratteristiche più belle di UDP è anche quella di poter fare il “broadcasting” di rete, ovvero mandare a tutti i client di una rete un pacchetto in una certa porta. Questa caratteristica può essere usata per esempio per fare la lista dei server a cui connettersi.

Panda3D teoricamente offre una funzione chiamata set_broadcast nella classe NetAddress, però non funziona, né in Python, né in C++. O almeno, non da sola.

In Python alla fine avevo lasciato perdere, però in C++ invece volevo sistemarla. Non riuscivo proprio a capire come fare, così ho cercato e ho visto che in generale bisogna dire al sistema operativo che la socket deve poter eseguire il broadcast.

Il set_broadcast sembra poterlo fare, ma se in realtà guardiamo il codice è solo una… [Leggi il resto...]

2
Gen 15 2012

Panda3D: ruotare la telecamera col mouse

Come l’avevo fatto con Blender, ora lo faccio con Panda3D ;)

Dall’hello world della documentazione ufficiale, ho fatto questo script che muove la telecamera col mouse.

In pratica esegue un task - una funzione eseguita ad ogni frame - che controlla la posizione del mouse, la trasforma da radianti a gradi sessagesimali (usati da Panda) e alla rotazione che ha in quel momento la telecamera aggiunte quella ottenuta con la trasformazione. Infine centra il mouse.

Devo ancora capire perché trasformando le coordinate del mouse - il cui intervallo in panda è [-1; 1] - si riesca a ottenere una buona rotazione con Panda, però sembra funzionare bene!

Ecco lo script python:

[Leggi il resto...]
0
Gen 02 2012

Panda3D per Debian Sid

Dopo aver studiato un po’ Blender e aver avuto qualche difficoltà ad ottenere esattamente quello che volevo con la Game logic ho deciso di provare un altro motore per videogiochi: Panda3D.

Panda3D è un motore rilasciato sotto la BSD Modified license e tra i suoi contributori si può citare la Walt Disney. Le sue API consentono di scrivere videogiochi in Python e in C++.

Come mesh da quanto ho capito - devo ancora approfondire per bene la questione - ha un formato suo (l’egg) ma è compatibile anche con X, 3ds ed esiste un plugin per esportare i file da Blender.

Perciò come caratteristiche promette bene.

Però c’è un problema: per Debian esiste il pacchetto solo per la Squeeze. E le dipendenze hanno software che include la versione nel nome del pacchetto e nei file stessi, perciò anche modificando il pacchetto non si ottiene un risultato utilizzabile (ho provato io stesso).

Così me lo sono ricompilato. Però la versione 1.72 (la stabile) non funzionava, così ho dovuto usare quella csv.

Per compilarla ho utilizzato il metodo makepanda/makepanda.py --everything --installer. Pur avendo specificato everything però alcune cose, tra cui ffmpeg sono state omesse. Invece con installer ho ottenuto un file deb che vi linko.

Un’ulteriore nota prima di scaricare e installare il file: ho compilato e installato anche bullet, una libreria per la fisica e anche Panda è configurato per usarla, perciò installate anche quel file. Purtroppo ho dovuto usare checkinstall e perciò non so le corrette dipendenze.

Ecco i link: bullet_2.79-1_i386.deb e panda3d1.8_1.8.0_i386.deb.

Spero vi possano tornare utili.