Piero V.

Un po' di riflessione sulle GUI in Ogre

Quando ho un po’ di tempo cerco di portare avanti anche il mio progettino con OGRE, un tentativo di gioco FPS.

Purtroppo il tempo è poco e le decisioni spesso devono essere ponderate molto accuratamente, altrimenti succede quello che mi era già successo con l’altro gioco, ovvero viene fuori un disastro che non si può sistemare perché come si modifica una cosa bisogna sistemarne altre 100.

Perciò vado avanti piano piano ma scegliendo bene come fare tutte le cose.

Un elemento fondamentale di un gioco sono le GUI, almeno quelle che consentono di creare i menu basilari.

Per OGRE ho provato le più diffuse, CEGUI E MyGUI, e Gorilla.

Le prime due li ho provati appena avevo cominciato con OGRE, perciò l’opinione può essere considerata fino solo ad un certo punto.

CEGUI mi pareva molto complicata e ciò veniva detto anche sul forum di Ogre. Poi mi pare avesse un formato tutto suo un po’ strano.

MyGUI è molto più semplice. Il progetto fornisce anche degli strumenti che permettono di costruire graficamente la GUI. Il formato utilizzato è XML e mi pare abbastanza semplice. Il problema maggiore sono gli eventi: sono potenti, però devono essere implementati in C++, perciò i vantaggi dell’XML vengono meno. In seguito tornerò sul problema. … [Leggi il resto]

Ogre, Gorilla, Luabind e segmentation fault

Le gui con Ogre possono essere fatte in moltissimi modi e con moltissime librerie.

Dopo aver provato CEGUI, che però mi sembra troppo complicato e MyGUI ho voluto provare Gorilla.

Mi pareva abbastanza buono e ha direttamente con la release ufficiale una possibilità interessante: quella di essere integrato con Lua.

Ho sempre odiato compilare per cavolate come le GUI, così il problema non si porrebbe. In più stavo già pensando di usare Lua per qualche aspetto del gioco che forse prima o poi finirò.

L’implementazione dipende da Luabind, «una libreria che ti aiuta a creare binding tra C++ e Lua» (cit. tradotta dalla pagina linkata). Basta inizializzare Luabind e chiamare la funzione bindGorilla e passare a Lua il vostro file.

O meglio, dovrebbe essere così semplice.

Purtroppo io ho riscontrato un segmentation fault. Ciò era dovuto alla riga 149, in cui si dichiarava la classe ScreenRenderable come figlia della classe MovableObject.

Rimuovendo la classe dal parametro del template sembra funzionare. Non ho ancora sperimentato il tutto, ma almeno non ci sono più segmentation fault.

Aggiornamento 31/10/2012: usando questa modifica non si possono usare le gui come nodi. Il modo più corretto quindi di risolvere il problema e quindi di avere questa funzionalità è quello di fare il binding della classe MovableObject. Era quello il problema del segmentation fault: Lua andava a cercare una classe che per lui non esisteva.

OgreStream

Update 13 ottobre 2012: vedere a fine articolo.

Basandomi sul lavoro di Edd, ho scritto un bridge per leggere i file degli archivi di Ogre con gli stream di C++.

Ciò comporta che potete riempire archivi zip, archivi deflate o anche un vostro formato proprietario e passarli direttamente a librerie compatibili con gli stream, quindi, per esempio TinyXML.

La classe si chiama OgreStream, e come parametri vuole un Ogre::DataStreamPtr, che viene ritornato da una classe di archivi e poi ci sarebbero come parametri opzionali la grandezza del buffer da leggere ogni volta e i caratteri da spostare. Comunque non c’è bisogno di personalizzarli.

Ho implementato anche i meccanismi di seeking.

Prima del 13 ottobre 2012 la funzione readsome non andava, perché è legata all’implementazione dello stream e al metodo showmanyc, che ho implementato successivamente.

Troverete tutte le informazioni utili nel file.