Dopo aver pubblicato Mystic Lotto, la mia ultima app Android sviluppata con Phaser e Capacitor, ho deciso di puntare su un progetto completamente diverso. Prima di tutto, Mystic Lotto è stato solo un test: non lo sto sponsorizzando più di tanto e, a dirla tutta, non lo considero un gioco “istituzionale” su cui investire davvero. Il mio obiettivo era piuttosto quello di togliere un po’ di ragnatele dal mio account Google Developer, provare gli annunci AdMob, testare sul campo un meccanismo responsive e fare pratica con Android Studio. A conti fatti posso dire che gli obiettivi sono stati tutti raggiunti.
Ora, però, sto progettando un’app un po’ più “seria”. Una di quelle che meritano sponsorizzazioni e campagne di marketing. E colpo di scena: come si evince dal titolo, non la realizzerò con Phaser.
Da qualche anno sto cercando di costruire la mia cassetta degli attrezzi ideale per lo sviluppo di giochi su dispositivi mobili. Da bravo orfano di Flash (pace all’anima sua), sono alla ricerca di qualcosa che mi dia la stessa soddisfazione. Purtroppo anche Phaser non è la mia tazza di tè: diciamo che ci andrei in vacanza, ma non ci vivrei. La sincronia con Capacitor può essere problematica e, a livello di performance, quando alzi l’asticella emergono i limiti delle app non native. Inoltre, il risultato finale dipende troppo dall’adattamento fatto da strumenti intermedi. Per questo sono tornato a rispolverare una soluzione apparentemente meno alla moda, ma che nei fatti offre un controllo totale delle risorse: Kotlin + libGDX.
Su Kotlin c’è poco da aggiungere: è il linguaggio ufficiale per lo sviluppo Android, creato da JetBrains. Moderno, elegante, orientato agli oggetti e completamente interoperabile con Java. Inoltre, grazie a Kotlin Multiplatform, può essere usato anche per applicazioni web, backend e progetti multipiattaforma. Ma la cosa che per me conta di più è la sua somiglianza con altri linguaggi che ho utilizzato in passato, ActionScript 3.0 in primis (sempre sia lodato, amen).
Un lettore smaliziato potrebbe chiedermi: che importanza ha ormai la tua capacità di imparare e capire un nuovo linguaggio? Soprattutto adesso che le IA possono scrivere il codice al posto tuo? A quel lettore risponderei: amico mio, fai attenzione, fai molta attenzione.
Mystic Lotto è stato realizzato in JavaScript moderno anche con il supporto delle IA. Ma in più di un’occasione ho dovuto correggere errori e bloccare derive progettuali che rischiavano di complicare il lavoro in modo irreparabile. E se sono riuscito a farlo è perché conosco discretamente bene JavaScript.
Le IA sono strumenti straordinari e imprescindibili, ma non si possono usare alla cieca in progetti complessi. Non basta scrivere un prompt tipo “fai tu”. Sarebbe come entrare nella cabina di pilotaggio di un Boeing 747 e affidarsi solo al pilota automatico senza avere il brevetto di volo. In altre parole, va bene se devi generare una paginetta web semplice, ma quando il progetto si fa strutturato rischi di precipitare senza paracadute. Almeno oggi, è ancora così.
Passando a libGDX: questa libreria nasce come progetto personale di Mario Zechner nel 2009. All’epoca stava scrivendo giochi Android e creò un framework chiamato AFX (Android Effects) per velocizzare le iterazioni e i test. Si rese presto conto che il ciclo “compila e installa su device” rallentava lo sviluppo, quindi portò il framework anche su Desktop per consentire un debug rapido. Oggi, dopo anni di miglioramenti e contributi, libGDX è un application framework multipiattaforma (Desktop, Android, iOS, Web) distribuito sotto licenza Apache 2.0. Si tratta di uno strumento open source potente, che fornisce un ambiente completo per la gestione di grafica, input e audio, con API che permettono di disegnare immagini sullo schermo e creare giochi senza dover scrivere ogni volta codice “a basso livello”.
Ci sarebbe ancora molto da dire sulle ragioni della mia scelta, ma per scaramanzia ne riparlerò appena l’app attuale sarà completata. Ho finalmente trovato la mia cassetta degli attrezzi ideale? Lo scopriremo strada facendo.





