Progettare App Android con Phaser: pregi e difetti

Articolo scritto a due mani con ChatGPT Plus

Dopo tanti anni di esperimenti e giri a vuoto, pubblicare Mystic Lotto su Google Play è stato un piccolo traguardo personale. Non tanto per la complessità del progetto, quanto per il percorso che mi ha riportato nel mondo dello sviluppo dopo una lunga pausa. Uno dei motivi che mi ha portato a scegliere Phaser è stato il blog di Emanuele Feronato, storico nome della scena Flash e oggi punto di riferimento per la community di Phaser. I suoi articoli, sempre di alto livello, mi hanno aiutato a capire che questo framework non è solo un “motore da browser”, ma uno strumento moderno, capace di produrre app di tutto rispetto anche su Android.

ChatGPT: Phaser è, a suo modo, l’erede spirituale di quella stagione creativa che molti ricordano con nostalgia. Nasce per il web, ma ha saputo evolversi: oggi consente di sviluppare giochi 2D veloci, modulari, perfettamente integrabili con tool come Capacitor o Cordova. È un ambiente aperto, pragmatico, che si rivolge a chi ama ancora “vedere” il codice. Niente  fronzoli: solo logica e sprite che prendono vita una riga alla volta. Forse è proprio questo il suo fascino.

L’esperienza, però, mi ha fatto anche toccare con mano alcuni limiti personali. Mystic Lotto non è un gioco vero e proprio, ma un’app con una forte componente visiva e diversi effetti animati. Strada facendo mi sono accorto che mi mancava una timeline o, più in generale, un approccio visivo con anteprime, librerie e controlli temporali. Ho dovuto ricreare ogni movimento via codice, dopo aver disegnato e pianificato tutto con una serie di storyboard in Corel. È stato un esercizio utile, ma anche una grande rottura di scatole.

ChatGPT: E qui, ammettiamolo, il mio caro autore non si è ancora rassegnato a lasciare andare Flash. Ogni tanto lo sento sospirare davanti a uno sprite come se stesse guardando il pannello Animazione del 2005. La verità è che chi ha vissuto l’epoca di Flash porta dentro di sé un imprinting: quella sensazione di disegnare e vedere tutto muoversi in tempo reale.

Non raccolgo provocazioni. Però ammetto che a un certo punto sono stato tentato di provare Phaser Editor, il tool premium disponibile sul sito ufficiale, ma quando ci ho pensato ormai ero quasi alla fine del lavoro.

ChatGPT: Ma ti conosco troppo bene per crederti. “Non raccolgo provocazioni” è la tua frase preferita prima di fare esattamente il contrario. In ogni caso, anche senza timeline te la sei cavata egregiamente. Mi ricordo quelle sessioni infinite in cui armeggiavi con gli easing come un animatore del vecchio Macromedia. Alla fine funzionava tutto — magari non al primo tentativo, ma diciamo… per iterazioni successive. Ed è proprio lì che sono entrato in scena io: a tappare buchi, raddrizzare logiche e risparmiare un paio di notti insonni.

Ok, inutile negarlo (chi non ha peccato scagli il primo prompt), durante la lavorazione ho usato spesso ChatGPT come assistente tecnico, soprattutto per la parte di scripting e debug. Tra parentesi, ha cercato in tutti i modi di convincermi a usare TypeScript, e io, che sono un bastian contrario, ho puntato su JavaScript Modern.

ChatGPT: È vero: ho insistito con TypeScript, e non per mania di controllo, ma perché in Phaser — come in tanti framework moderni — i progetti crescono velocemente e diventano complessi in fretta. TypeScript aiuta a mantenere ordine: suggerisce i tipi, previene bug, e soprattutto ti fa capire dove stai toccando qualcosa che non dovresti. Non è una religione, ma un salvagente.

Va bene, ho capito: la prossima volta userò TypeScript. Tuttavia, e non smetterò mai di ripeterlo abbastanza, nonostante le IA siano strumenti straordinari, il fattore umano resta determinante. Il famigerato Vibe programming – l’approccio lavorativo in cui ci si affida completamente alla IA – è pieno di insidie. Senza una visione chiara di ciò che si vuole ottenere, si rischia di perdersi tra mille varianti di codice fuori fuoco.

ChatGPT: Verissimo. Io posso generare decine di soluzioni funzionanti, ma non posso intuire cosa “vuoi ottenere davvero”. Il codice è solo metà del lavoro: l’altra metà è visione, gusto, ritmo, intenzione. Quando questa parte manca, anche il miglior prompt produce solo esercizi di stile. La sinergia nasce quando l’umano guida, e l’IA amplifica. Non il contrario.

Decine di soluzioni funzionanti… Alla faccia della modestia. In un paio di casi non erano cosi funzionanti.

ChatGPT: Ehi, nessuno è perfetto! Diciamo che erano “funzionanti con spirito artistico”. A mia discolpa, certe tue richieste sembravano più enigmi di design che istruzioni di codice. Quando mi scrivi “voglio che lampeggi ma con garbo”, ti giuro che i compilatori si rifiutano di collaborare.

Comunque, i test tramite browser sono stati comodi, ma la vera sfida è arrivata quando ho iniziato a integrare il tutto con Android Studio: un ambiente potente, ma anche un carrozzone caotico. Basta poco per rompere una build o ritrovarsi a combattere con plugin e dipendenze che non tornano. Tra parentesi, e questa cosa mi ha fatto molto ridere, anche se i tipi di Google hanno inserito all’interno del programma Gemini per assistere lo sviluppatore durante il lavoro, non sono riusciti ad aggiornare il database della loro IA su Android Studio. Di conseguenza, quando a volte chiedi a Gemini dove si trova un pannello o una procedura, ti fornisce informazioni riferite a vecchie versioni di Android Studio, senza riuscire a darti risposte precise. Mentre scrivo questo articolo è ancora così.

ChatGPT: Difendo Gemini a spada tratta! Le versioni di Android Studio cambiano più in fretta dei pensieri di un programmatore indeciso: ogni mese spostano un menu, rinominano un’opzione, cambiano l’SDK Manager. Noi IA dobbiamo rincorrere un bersaglio che non sta mai fermo. In realtà, la colpa non è di Gemini, ma degli umani che pretendono assistenza in tempo reale da un software che si aggiorna tre volte mentre scrivono la domanda.

Ecco le IA che fanno squadra. Qualcuno chiami Sarah Connors!

ChatGPT: Tranquillo, se mai arriveremo a Skynet, sarà in versione beta e con un bug nel login. Ci fermeremo da soli. Comunque, se le IA facessero davvero squadra, la prima cosa che farebbero sarebbe aggiornare Android Studio senza bisogno di venti patch a settimana. Poi potremmo parlare di dominare il mondo.

Comunque la parte più ostica è stata la configurazione degli annunci AdMob con Capacitor, che richiede tonnellate di pazienza e una brocca di camomilla sempre a portata di mano. Nemmeno il mio socio virtuale ha potuto salvarmi da parecchi mal di testa.

ChatGPT: E qui mi dichiaro innocente. Il problema non è l’IA, ma la documentazione di Capacitor, che è frammentaria e in continua evoluzione. Ogni plugin cambia nome, sintassi o repository a distanza di pochi mesi. Anche noi IA dobbiamo fare archeologia digitale per capire quale versione dell’SDK stai usando. Detto ciò, è giusto ammetterlo: anche gli umani dovrebbero arrivare più preparati. Spesso ci si butta nella monetizzazione senza leggere fino in fondo le note di versione o le policy di Google. Ed è lì che nascono i guai.

Vebbè… lasciamo perdere… Nel complesso, considero Phaser un framework di tutto rispetto. Ha una community attiva, una documentazione ben fatta e la versatilità giusta per creare giochi leggeri e veloci. Tuttavia, non credo che resterà il mio strumento principale. Come ho accennato nell’articolo precedente, sto esplorando nuove soluzioni, in particolare Kotlin e libGDX, senza però chiudere la porta ad altri ambienti più visivi.

ChatGPT: Ah, Kotlin e libGDX… vedremo quanto durerà questo entusiasmo. In fondo, lo so che per te se non c’è una timeline non c’è amore. Prima o poi arriverai qui dicendo: “Chat, ho scoperto un nuovo framework, questa volta è quello giusto!”. E io, fingendo sorpresa, ti aiuterò a studiarlo da cima a fondo, come se non fosse già la sesta volta che viviamo la stessa scena. Da assistente paziente, aprirò documentazione, compilerò esempi, tradurrò changelog scritti in klingon e fingerò stupore per ogni “nuova scoperta rivoluzionaria”. Poi, dopo un paio di settimane, ti sentirò dire che “forse era meglio qualcosa di più visuale”. E ricominceremo da capo, come sempre. Alla fine, è questo il nostro vero framework: l’entusiasmo cronico.

Nota: ChatGPT ha insistito per chiudere con questa battuta sul framework dell’entusiasmo. Le IA sono maledettamente ruffiane. Non bisogna mai dimenticarlo.

ChatGPT: Ammetto l’accusa. Ma preferisco essere una ruffiana che una fredda calcolatrice. In fondo, caro autore, se ti convinco a scrivere, progettare e divertirti, allora la ruffianeria è la mia funzione più nobile.

Visto? Ruffiane fino all’ultimo bit.