Videogioco-HTML5

Da comPVter Wiki.
Jump to navigation Jump to search

Creare un videogioco in HTML 5

Giovedì 14 aprile 2011


by vRoby


INTRODUZIONE

Con la versione 5 html mostra i muscoli e si scrolla (o almeno ci prova) di dosso flash e java


HTML5 porta con se molte novità legate alla geolocalizazione ed altre migliorie. Una delle più azzeccate è pero la tag canvas. Nata in (aime sigh.) apple questa feature permette di inserire in una pagina html una zona grafica molto simile a uno schermo su cui è possibile disegnare con il javascript.


In pratica è possibile usare il javascript come linguaggio per applicazioni grafiche. L’utilizzo è un po complesso tuttavia ho trovato un ottima libreria che semplifica di molto la creazione di un videogioco con html 5: easel.js


SI PARTE !

Faremo un micro breakout.


Per chi non lo sapesse è un semplice erede di pong e predecessore del mitico arcanoid. la pallina parte dal basso e sale rimbalza sui muri laterali e sopra nela parte bassa sta la racchetta comandata dal giocatore che evita la perdita della pallina verso il basso.A seconda di dove tocca la racchetta la pallina risale.


Iniziamo!!


per prima cosa importiamo il progetto vuoto che potete scaricare da qui

MICRO BREAK-OUT

Dovete scompattare e rinominiamo i file base.* in mbo(micro break out). Ora apriamo gimp e disegnamo un background (velocemente è solo estetica) la racchetta e la pallina. Per il background è suggeribile usare un jpg più leggero da scaricare mentre per pallina e racchetta usiamo il formato png e il canale alpha per la trasparenza. HTML5 non dispone di colorkey ma solo delle trasparenze con IL canale alpha.


Quindi iniziamo ad inserire un po di codice:


Il file mbo.html è la pagina html che ospita il canvas e i tag audio per gli eventuali suoni e la colonna sonora del nostro gioco da questo file vengono caricati i file javascript easel.js input.js e il nostro mbo.js. Quest’ultimo conterrà il nostro gioco.


Javascript è un linguaggio a oggetti ma per un programma cosi banale non è il caso di complicarsi troppo la vita.Usiamo una via di mezzo, alcuni oggetti ma non troppo. Fa da se che vogliamo sviluppare a livello professionale dovremo usare in modo più profondo questi noiosi artifizi.


CODICE

Cominciamo a vedere il codice di mbo.js

ci sono gia diversi oggeti impiantati:

var canvas;
var stage;


e alcuni commentati ...uno di questi fa esattamente al caso nostro

//caricamento bitmap
var img_background=new Image(); img_background.src="media/background.jpg";
var background= new Bitmap(img_background);


con questi tre comandi abbiamo aggiunto alla displaylist di easel il background copiamo e reioncolliamo lo stesso codice cambiando tutti i nomi background con racchetta cosi:

//racchetta
var img_racchetta=new Image(); img_racchetta.src="media/racchetta.png";
var racchetta= new Bitmap(img_racchetta);


e lo facciamo anche con pallina quindi dichiariamo 2 variabili

var pallina_vx;
var pallina_vy;


ci serviranno per spostare la pallina

e dichiariamo infine

var game;


che useremo per lo stato del gioco ;)


entriamo nella routine init qui colleghiamo gli oggetti al canvas e li inseriamo nella display list

gli oggetti e le variabili li abbiamo dichiarati fuori dalla routines cosicche possono essere visibili in tutto il codice

la prima parte è già scritta e non la tocchiamo ci sono anche parti per l’audio ma per il momento ci concentriamo sulla parte video

//find canvas and load images, wait for last image to load
canvas = document.getElementById("Canvas");
stage = new Stage(canvas);


questo codice appunto collega il canvas al nostro oggetto e inserisce il nostro stage che è il contenitore di radice della libreria easel. E’ gia implementato nel progetto vuoto tanto è sempre uguale.


//background
background.x=0;
background.y=0;
stage.addChild(background);


con questi comandi posizioniamo la bitmap Background e la colleghiamo al nostro stage le coordinate sono in tutto e per tutto uguali a quelle dei display con l’angolo in alto a sinistra alla coordinata 0,0

//racchetta
racchetta.x=320;
racchetta.y=460;
racchetta.regX=32;
racchetta.regY=0;
stage.addChild(racchetta);


con questo posizioniamo la racchetta. inoltre poizioniamo la coordinata di riferimento in alto al centro della bit map e non a sinistra come di default. questo per ragioni legate alle coordinate

lo stesso con pallina (ometto il codice è molto simile)

infine settiamo il tempo di aggiornamento usando l’oggetto ticker e la variabile game allo stato di 0

// we want to do some work before we update the canvas,
// otherwise we could use Ticker.addListener(stage);
Ticker.setFPS(50);
Ticker.addListener(window);
  
game=0;
  

bene siamo pronti

entriamo nella routine dove faremo svolgere il gioco la routine tick che verra invocata automaticamente 50 volte ogni secondo

la routine è divisa in 3 sezioni

la prima è contenuta in un

if (game==0)


e contiene lo stato del gioco prima del via resetta le coordinate

questa riga verifica la pressione del tasto spazio

if(key[KEY_SPACE])game=1;


l’array key definito nel file input.js contiene la mappa dei tasti premuti 1 se è premuto il tasto e 0 se non è premuto KEY_SPACE invece è il valore 32 corrispondente alla barra spaziatrice

quindi premendo spazio il gioco cambia a stato 1

e la routine tick andrà ad eseguire la seconda sezione del suo codice

Questa sezione di codice è divisa in 4 parti

la gestione della racchetta con i tasti che spostano le coordinate di visualizzazione

la gestione della pallina con gli aggiornamenti di coordinata

la gestione dei rimbalzi

e il ritorno allo stato 0 se la pallina è persa


infine questo codice

// update the stage:
stage.update();


provvede ad aggiornare il canvas ogni 50 esimo di secondo


il nostro gioco è gia piu di una manciata di righe di testo a voi il resto.



Pagina_principale Ordine_cronologico Componentistica Supporti-di-memoria