Per rendere un gioco interattivo occorre programmarne la logica usando degli script: uno script è un mini-programma con istruzioni da eseguire al verificarsi di determinate condizioni.
GDScript è il linguaggio di programmazione ideato dagli autori di Godot, ottimizzato e strettamente integrato con il game engine. È stato creato allo scopo di aiutare gli utenti a concentrarsi sul motore di gioco stesso, piuttosto che imparare ad integrare codice scritto in altri linguaggi di programmazione (Godot supporta anche altri linguaggi, come C# e C++, soprattutto grazie alla comunity degli sviluppatori). Dal punto di vista della sintassi, GDScript assomiglia moltissimo al linguaggio Python, risultando abbastanza semplice da imparare.
Relazione tra scene, nodi e script
Quando si crea un progetto in Godot, è necessario creare scene, costruite raggruppando nodi. Per rendere una scena interattiva occorre collegare script ai nodi che la compongono. Non tutti i nodi necessitano di uno script ed è possibile collegare un solo script a ciascun nodo: in altri termini, o un nodo non ha nessuno script, oppure può averne uno solo.
Il flusso di lavoro è il seguente:
- si crea un progetto per il gioco che si vuole realizzare;
- si crea una scena (un videogame reale ne ha molte);
- si aggiungono i nodi necessari a ciascuna scena;
- si collega uno (ed un solo) script al nodo o alla scena che richiedono la logica di gioco necessaria all'interattività.
Creazione di uno script
Per collegare uno script ad un nodo bisogna innazitutto selezionare il nodo nello Scene Dock e poi creare un file di script usando il pulsante apposito (in alternativa: selezionare il nodo, fare click con il tasto destro del mouse sul nodo e selezionare l'opzione "Attach Script"). Come esempio, colleghiamo uno script alla finestra del progetto hello-godot che abbiamo creato in precedenza: selezionare il nodo che corrisponde al logo di Godot e fare click sull'icona di creazione script.
Si aprirà una finestra pop-up dove va inserito il nome del file di script (per impostazione predefinita, il file di script di un nodo ha lo stesso nome del nodo, ma si può darne uno più significativo), poi si preme il pulsante <Create>. I file di script in Godot hanno estensione .gd (in figura il file è sprite_2d.gd).
Nello Scene Dock, a fianco del nodo a cui abbiamo collegato lo script, comparirà una piccola icona che indica l'esistenza dello script; nel FileSystem Dock apparirà il file dello script.
Per visualizzare lo script bisogna clickare sull'icona al lato del nodo Sprite2D oppure in alto, sull'icona "Script" nel Workspace. Il codice di scripting verrà visualizzato nel Viewport.
Se eseguite il progetto non succederà nulla, perché ancora non sono state aggiunte istruzioni. Modifichiamo lo script come nella seguente figura (notare il carattere di sottolineatura "_" davanti alla parola "process": _process (notate anche i due punti ":" dopo la parentesi tonda chiusa).
Ora eseguite il progetto: se avete fatto le cose per bene, di fronte a voi avete la finestra del progetto hello-godot (che prima era statica), con l'icona di Godot che ruota continuamente di circa 90° al secondo in senso orario (quindi per fare una rotazione completa impiega circa 4 secondi). Complimenti, avete terminato il vostro primo script realizzando un'animazione!
Contenuto di un file di script
Una volta che un file di script (da ora in poi semplicemente script) è stato creato e collegato ad un nodo, il nostro compito sarà di scrivere il codice che costituisce la logica di gioco relativa a quel nodo. Ogni script è composto da una o più funzioni: una funzione è costituita da un insieme di istruzioni che vengono eseguite in sequenza, nell'ordine in cui sono state scritte. Ciascuna funzione viene eseguita in base a determinati eventi che dovrebbero accadere durante il gioco.
Nell'esempio dell'animazione, lo script è strutturato nel modo seguente:
- extends Sprite2D nella riga (1) specifica che il nodo creato è una specializzazione di Sprite2D, un'entità che rappresenta un'immagine bidimensionale;
- var veloc = 1.57 nella riga (2) definisce una variabile (var) chiamata veloc, un contenitore di valori che, nello specifico, immagazzina il valore decimale 1,57 (nei linguaggi di programmazione il separatore decimale è definito da un punto, non dalla virgola). Questa variabile è usata per definire una velocità di rotazione angolare (in senso orario) misurata in radianti al secondo (1,57 radianti corrispondono approssivamente ad un angolo di 90°). Per curiosità, potete cambiare il valore in -1.57 ed eseguire il progetto: vedrete cambiare il verso di rotazione;
- func _process(delta): nella riga (3) ridefinisce (cioè specifica) una particolare funzione (func) di Godot chiamata _process (notare il carattere di sottolineatura "_" subito prima di "process", la coppia di parentesi contenenti il parametro "delta" e i due punti ":" finali che servono a terminare la definizione della funzione).
La riga (4) rotation += veloc * delta è l'unica istruzione della funzione (sul significato di questa istruzione torneremo al momento opportuno). Da notare l'indentazione dell'istruzione, cioè l'inserimento di un carattere di tabulazione davanti all'istruzione stessa, che fa sì che essa sia scritta più a destra rispetto al nome della funzione. - In Godot la funzione _process è eseguita continuamente (e molte volte al secondo) su un'immagine bidimensionale: in questo caso determina una rotazione dell'immagine 90° ogni secondo e, poiché viene eseguita di continuo, il logo continuerà a ruotare senza fermarsi mai.
A questo punto sapete come creare un progetto, inserire una scena per giochi 2D, aggiungere nodi per le immagini e collegare script ai nodi. Se avete dubbi o incertezze su come fare una di queste cose dovete fermarvi e rileggere i precedenti articoli prima di continuare.
Precedente | Indice | Successivo |