- Edited
Nell’ultimo mese ho cominciato a lavorare a ncJump, un progetto fatto con l’nCine, che come molti di voi sapranno è un framework open-source scritto in C++ dal nostro @encelo.
Qualche tempo fa, dei membri della community di GameLoop hanno seguito il corso CS50’s introduction to game development, e ho pensato che la sequenza di giochi presentata potesse darmi un buon suggerimento su che tipo di gioco creare.
Un paio di sviluppatori hanno già fatto o hanno cominciato a lavorare ai primi giochi della lista di quel corso. C’è un clone di Pong scritto da @encelo, un clone di Flappy Bird scritto da @Vasile, e un clone di Breakout in sviluppo da @mat3. Quindi ho optato per un clone di Super Mario Bros.
L’idea sarebbe di seguire i passi della lezione 4 del CS50 usando l’nCine invece di Love2D.
Per cominciare a sviluppare un gioco con l’nCine è necessario effettuare alcuni passi che fortunatamente sono documentati nella pagina di download dell’nCine. Quindi ho installato l’nCine, clonato il progetto ncTemplate, e ho cominciato a smanettare sul codice di quest’ultimo.
Un po’ di codice
La cosa principale da considerare dal punto di vista del design del software è che ho rinominato MyEventHandler
in JumpHandler
e ho introdotto la classe Game
. Mentre JumpHandler
svolge un ruolo da ponte tra il gioco e l’engine, Game
è il nucleo del progetto ed è responsabile del ciclo di vita dei suoi oggetti e della logica dell’applicazione.
Poi ho proseguito con l’implementazione di una classe Entity
seguendo l’idea di un Entity component system. L’entità può avere componenti come un’immagine, una macchina a stati, o un corpo per la fisica e le collisioni.
Un’interfaccia grafica è fondamentale per iterare velocemente su nuovi elementi man mano che vengono aggiunti al gioco, sia per avere un feedback visivo quando serve fare debugging sia per cambiare ogni tipo di valore o configurazione a run-time. Per questo motivo ho introdotto una classe Editor
, che fa uso massiccio di Dear ImGui di @ocornut, oltretutto direttamente fornita dall’nCine.
Box2D è la mia scelta per quanto riguarda la fisica e le collisioni 2D. È sviluppata da @erincatto ed è molto facile da usare.
Le ultime settimane le ho passate implementando degli importanti stati per l’Entity: idle, move, jump, e fall. Secondo me rappresentano le basi dell’intero gameplay e credo che il risultato sia buono abbastanza per proseguire sui prossimi passi di sviluppo, ma per quelli dovrete aspettare il prossimo devlog, quindi stay tuned!