Piero V.

Back to Rust again

In 2010 I tried to program a video game with a friend for the first time. And it was our first time with C++, too. Of course, it was C++2003 since C++11 was the new-not-yet-stable thing.

I must say that our approach was quite naive. For example, we thought we would always play the game on a LAN. Thus, we never worried about lag compensation.

Now, a few years have passed, and I have learned a thing or two, even though I still have to finish a game project.

So, at the beginning of this year, this friend pushed me to learn Rust, and I decided to learn it through game development again.

At a certain point, I decided to use a physics engine, and I found Rapier. I was especially interested in its determinism to finally implement a lag compensation mechanism. But I did not understand how to use it correctly. Only recently, I understood it favors an approach similar to functional programming, whereas I was trying an OOP-like approach. This also led to fights with the borrow checker. So, because of these problems and my usual decrease in interest and focus, I left yet another project incomplete. … [Leggi il resto]

Unity

Unity è un game engine che può creare contenuti per un gran numero di piattaforme: dal classico computer, agli smartphone, alle console di videogiochi.

Contrariamente al mio solito, ho provato questo pacchetto che, pur potendo creare contenuti per Linux, non è disponibile per questo OS, né è software libero.

Tuttavia ho deciso di provarlo perché è estremamente diffuso ed è sempre ben lodato e finalmente ne ho capito il motivo.

Essenzialmente Unity rende estremamente facile e soprattutto veloce la creazione di un gioco: anziché focalizzarsi sulla stesura del codice, si concentra sulla creazione dei livelli di gioco su un editor grafico. Quindi le varie entità, tra cui ad esempio le mesh, vengono create direttamente lì, poi, seguendo un design molto modulare, si possono abilitare diversi comportamenti, che vanno dalla fisica all’emissione di luci e audio. Soprattutto si possono associare degli script C#, che alla fine sono solitamente delle classi che implementano alcuni metodi prefissati.

Per il momento ho seguito un paio di tutorial, e risultati sono stati estremamente soddisfacenti. In un’ora si riesce a fare ciò che un motore più tradizionale, basato tutto sulla stesura di codice richiederebbe almeno un giorno, se non due.

La cosa più simile che io abbia usato finora è Blender Game, ma Unity come vantaggio ha che è più facile da usare. Uno svantaggio è che Unity è più pesante sia come installazione, che come grandezza del gioco creato.

Non escludo che magari in futuro io non arrivi magari a rilasciare anche qualcosa fatto con questo engine, anche perché tra velocità d’uso e semplicità rende possibile anche pensare di completare un gioco anche a una persona da sola.

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]