Quando l’applicazione da sviluppare è un gioco, si può usare un server web e un framework per HTML5. Con Phaser (licenza d’uso MIT) si ottiene un’applicazione multipiattaforma (non solo per dispositivi mobili).
Il framework si chiama Phaser1 e funziona semplicemente sul browser, ma richiede un server web per evitare il problema SOP (Same Origin Policy).
Il gioco si sviluppa costruendo classi e metodi in JavaScript, ma esiste anche un editor visuale (solo a pagamento).
Ogni gioco è composto da alcuni file, vediamo un esempio della struttura del progetto:
. - ── assets | + ── images - ── lib | ├─── phaser.js - ── src | ├─── main.js | ├─── Scena1.js | ├─── Scena2.js | ├─── Scena3.js ├─── index.html
In questo semplice esempio, fare particolarmente attenzione alle righe 8 e 18. Il contenuto di index.html
è il seguente:
<!DOCTYPE html> <!--index.html--> <html> <head> <meta name="viewport" content="width=device-width,initial-scale=1"> <script src="./lib/phaser.js"></script> <style> body { margin: 10px; padding:10px; } div#miodiv { width: 1024px; height: 768px } /* richiesto per centratura*/ </style> </head> <body> <div id="miodiv"> <script>screen.orientation.lock('landscape'); </script> <script type="module" src="./src/main.js"> </script> </div> </body> </html>
Nel file main.js
si devono importare e configurare tutte le scene previste nel gioco. Il contenuto di main.js è il seguente:
// ./src/main.js import {Scena1} from './Scena1.js'; import {Scena2} from './Scena2.js'; import {Scena3} from './Scena3.js'; const config = { type: Phaser.AUTO, scale: { mode: Phaser.Scale.NONE, parent: 'miodiv', autoCenter: Phaser.Scale.CENTER_BOTH, autoRound: true, }, width: 1024, height: 768, backgroundColor: '#332222', parent: 'miodiv', scene: [ Scena1, Scena2, Scena3 ], physics: { default: 'arcade', arcade: { debug: false } } }; let game = new Phaser.Game(config);
Il contenuto di Scena1.js
(è una classe con metodi da implementare obbligatoriamente, ma anche vuoti)
// ./src/Scena1.js export class Scena1 extends Phaser.Scene { constructor () { super('Scena1'); } preload () { // questo metodo è eseguito completamente prima di passare al successivo: create() this.testo1 = this.add.text(112, 100, 'scena1-start \n clicca per cambiare scena'); } create () { // questo metodo è eseguito completamente prima di passare al successivo: update() this.input.once('pointerdown', () => { // avvia un'altra Scena. this.scene.start('Scena2'); }); } update() { // questo metodo è il main loop, viene ripetuto ad ogni passo / step / del gioco } }
Il resto del codice è nel seguente allegato.
Prima di provarlo devi installare un server web e poi digitare nel browser direttamente l’indirizzo
http://localhost/percorso/di/installazione/index.html
- https://phaser.io/ [↩]