Programmare un Platform

Programmare un Platform

 

In questo tutorial andremo ad esaminare solo alcuni aspetti della programmazione di un Platform, in quanto, progettare un Platform EngineMotore di gioco Platform... professionale richiede molto tempo e lavoro!

 

Definizione di Platform Game

 

Platform Game, Platform o Platformer sono termini che indicano videogames dove la meccanica di gioco implica l’attraversamento di livelli costituiti da piattaforme (spesso disposte su più piani).

Ricorderete sicuramente ii Platform più famoso di tutti: Super Mario Bros!

 

super-mario-bros

 

Caratteristiche dei Platform

 

In questo genere di videogames la complessità sta nel gestire la fisica del gioco, collisioni, gravità, movimenti, salti (doppi saltitripli salti… e chi più ne ha più ne metta! 😀 ) e la gestione della velocità di movimento del giocatore che deve essere in sincronia con la velocità di scorrimento dei frames delle animazioni.

Noi tratteremo solo gli aspetti base: movimenti, gravità, salti e collisioni con un Object solido.

 


 

Scaricate il Materiale!

 

Scaricate i due sprites che ho preparato per voi…

DOWNLOAD SU MEDIAFIRE!

 


 

Creazione del Progetto

 

Create un nuovo progetto in GameMaker: Studio ed importate i due sprites (spr_giocatore e spr_terreno).

Impostate Precise Collision Checking ad entrambi gli sprites.

Ora create due Objects, nominateli Terreno e Giocatore ed assegnategli i rispettivi sprites.

Assegnate la proprietà Solid all’Object Terreno: in questo modo verrà generato un evento di collisione speciale per cui l‘istanza che collide torna automaticamente alla posizione precedente alla collisione.

Create una nuova Room (640 x 480 pixels) ed impostate la Speed a 60 frames al secondo.

Posizionate l’Object Terreno nell’angolo in alto a sinistra della Room (x: 0 e y: 0).

Posizionate l’Object Giocatore al centro della Room un po’ più in alto dell’Object Terreno.

Ora dovreste avere una situazione del genere:

platform-room

 

Creazione del Giocatore

 

Aprite le proprietà dell’Object Giocatore, e nel Create Event scrivete il codice seguente:

velocita = 4;//imposta la velocità del Giocatore
salto = 8;//imposta la forza del salto effettuato dal Giocatore
max_pixel = 15;//numero massimo di pixel scalabili dal Giocatore

 

La funzione che dovranno svolgere le prime due variabili è abbastanza chiara, la funzione della terza variabile invece la capirete fra poco… 😉

 

Controllare la Gravità

 

Nel GML (Game Maker Language) esiste già una variabile built-inInstallata, incorporata, inclusa nel software. che ci consente di controllare la gravità: la variabile gravity!

Per gestire questa variabile avremo bisogno di uno Step Event quindi createlo ed inserite il seguente codice:

//imposta la direzione della gravità: 0 = verso destra, 90 = verso l’alto, 180 = verso sinistra, 270 = verso il basso
gravity_direction
= 270;
//Se il Giocatore non collide verso il basso (quindi non è sul terreno) allora attiva la gravità!
if place_free(x,y+1)
{
gravity = 0.3;
}
//Altrimenti azzera la gravità (perchè il Giocatore è sul terreno)
else
{
gravity = 0;
}
//Limita la velocità massima in caduta a 12
vspeed = min(12,vspeed);

 

Naturalmente impostando un valore maggiore alla variabile gravity la forza di gravità sarà maggiore quindi il Giocatore cadrà più velocemente!

Se non avessimo inserito un limite di velocità verticale probabilmente la variabile gravity avrebbe incrementato continuamente quest’ultima consentendo così all’Object Giocatore di sorpassare l’Object Terreno (oggetto con cui invece dovrebbe collidere!).

NOTA: la funzione place_free(x, y) restituisce falso solo quando rileva una collisione con un oggetto di tipo Solid.

NOTA: la funzione min(val1, val2, ecc.) restituisce il minimo dei valori di input quindi scrivere min(12,vspeed); significa che se la variabile vspeed è maggiore di 12 restituisce 12.

 

Controllare il Salto

 

Aggiungete un Keyboard Event, per la freccia su (Up) e scrivete il seguente codice:

//Se non c’è spazio libero verso il basso (quindi il Giocatore è sul terreno)…
if (!place_free(x,y+1))
{
vspeed = -salto;//allora esegue un salto (minore sarà questo valore e maggiore sarà il salto effettuato)
}

 

NOTA: scrivere if(!place_free(x,y+1)) equivale a scrivere if(not place_free(x,y+1))

 

 

Controllare l’Atterraggio sul Terreno

 

Create un Collision Event con l’Object Terreno e scrivete il seguente codice:

//Se la velocità verticale del Giocatore è maggiore di 0 (quindi è in caduta) e non c’è spazio libero verso il basso…
if (vspeed > 0 && !place_free(x,y+vspeed))
{
move_contact(270);//muove il Giocatore nella direzione indicata finchè non collide
vspeed = 0;//azzera la velocità verticale del Giocatore
}

 

Controllare i Movimenti su Terreni Irregolari

 

Create due Keyboard Event per le freccia sinistra e destra (Left e Right), e scrivete rispettivamente i seguenti codici:

FRECCIA SINISTRA (LEFT)

//Questo ciclo for gestisce i pixel scalabili dal Giocatore per consentirgli di camminare su terreni irregolari
//Effettua dei controlli dal basso verso l’alto fino ad un numero massimo di pixel dichiarati nella variabile max_pixel
for (i = 0; i < max_pixel; i++)
{
//se trova una spazio libero colloca il Giocatore in quella posizione
if (place_free(x-velocita,y-i))
{
x -= velocita;
y -= i;
break;
}
}

 

FRECCIA DESTRA (RIGHT)

//Questo ciclo for gestisce i pixel scalabili dal Giocatore per consentirgli di camminare su terreni irregolari
//Effettua dei controlli dal basso verso l’alto fino ad un numero massimo di pixel dichiarati nella variabile max_pixel
for (i = 0; i < max_pixel; i++)
{
//se trova una spazio libero colloca il Giocatore in quella posizione
if (place_free(x+velocita,y-i))
{
x += velocita;
y -= i;
break;
}
}

 

Ora potete compilare il gioco cliccando sul’icona Run the game.

Enjoy! 🙂

Alla prossima! 🙂

 


 

Scaricate la Demo!

 

Nella mia demo ho limitato anche la posizione orizzontale del Giocatore in modo da non consentirgli di uscire fuori dalla Room.

DOWNLOAD SU MEDIAFIRE!

 


 

Sono Luigi Piscopo, anche conosciuto come DJ GiDeejay / Producer / Remixer nel mondo della musica o MastergidanIl mio nickname deriva dall'unione di due parole: Master (Maestro) e Gidan (Il nome del protagonista di uno dei miei videogame preferiti: Final Fantasy IX) dagli appassionati di GameMakerCopyright © YoYo Games Ltd.. Utilizzo GameMakerCopyright © YoYo Games Ltd. sin dalla versione 5. Sono un Produttore con molta esperienza in photo editing, video editing, audio editing, grafica pubblicitaria, web design, programmazione e promozione.

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*