Instanziare

Introduzione

Creare una singola scena e aggiungere nodi a questa puó funzionare per piccoli progetti ma, quando il progetto diventa piú grande e complesso, il numero di nodi puó diventare rapidamente ingestibile. Per risolvere questo problema Godot permette che un progetto sia separato in un qualsiasi numero di scene in modo da avere uno strumento che ti aiuti adn organizzare le diverse componenti di un gioco.

In Scene e nodi hai imparato che una scena é una collezione di nodi organizzata in una struttura ad albero, con un singolo nodo come radice.

../../_images/tree.png

Puoi creare quante scene vuoi e salvarle su disco. Le scene salvate in questa maniera sono chiamate «Packed Scenes» e hanno estensione .tscn.

../../_images/instancingpre.png

Una volta che una scena é stata salvata puó successivamente essere istanziata all’interno di un’altra scena esattamente come qualunque altro nodo.

../../_images/instancing.png

Nell’immagine sopra, la Scena B é stata aggiunta alla Scena A come istanza.

Instanziazione per esempi

Per capire come funziona l’instanziazione, iniziamo scaricando un progetto di esempio: instancing.zip.

Decomprimi questo progetto ovunque tu voglia, quindi apri Godot e aggiungilo al Gestore di Progetti utilizzando il bottone “Importa”:

../../_images/instancing_import.png

Naviga fino alla cartella in cui hai estratto l’archivio e apri il file project.godot che trovi all’interno, a questo punto il progetto apparirá nella lista dei progetti. Modifica il progetto premendo sul bottone “Modifica”.

Questo progetto contiene due scene: «Ball.tscn» e «Main.tscn». La scena Ball usa un RigidBody2D per simulare un comportamento fisicamente corretto, mentre la scena principale contiene un insieme di ostacoli su cul la palla possa collidere (utilizzando StaticBody2D).

../../_images/instancing_ballscene.png ../../_images/instancing_mainscene.png

Apri la scena Main e seleziona il nodo radice:

../../_images/instancing_mainroot.png

Quello che vogliamo é aggiungere un’istanza della scena Ball come figlia di Main, fai click sulla bottone a forma di catena (il testo in sovrimpressione dice «Istanzia un file scena come nodo.») e seleziona il file Ball.tscn.

../../_images/instancing_linkbutton.png

La palla sará piazzata nell’angolo in alto a sinistra dell’area di schermo (questa é la posizione (0, 0) in coordinate sullo schermo). Fai click e trascina la palla in una posizione in alto e centrale della scena:

../../_images/instancing_placeball.png

Premi «Play» e guarda la palla cadere verso il fondo dello schermo:

../../_images/instancing_playbutton.png

Istanze multiple

You can add as many instances as you like to a scene, either by using the «Instance» button again, or by clicking on the ball instance and pressing Ctrl + D (Cmd + D on macOS) to duplicate it:

../../_images/instancing_multiball.png

Esegui la scena di nuovo e tutte le palle cadranno.

../../_images/instancing_multiball.gif

Modificare le istanze

Open the Ball scene, expand the PhysicsMaterial by clicking on it, and set the Bounce property to 1.

../../_images/instancing_physicsmat2.png

Premi “”Play”” e ti renderai conto che tutte quelle sfere instanziate adesso rimbalzano di più. Questo perché le sfere instanziate si basano sulla scena salvata, e le modifiche a quella scena affliggeranno tutte le sue istanze.

Puoi anche modificare istanze individuali. Riporta il valore di Bounce a 0, poi nella scena Main, seleziona una della palle istanziate e modifica il suo valore Bounce a 1 e premi «Play».

../../_images/instancing_property.png

Nota che compare un bottone «Annulla» in grigio a fianco alla proprietá modificata. Quando questo bottone é presente significa che é stato modificato un valore che va a sovrascrivere il valore della scena salvata. Il valore personalizzato nell’istanza rimane anche se il valore di quella proprietá viene modificato nella scena originale. Premendo il bottone di annulla riporterá il valore a quello salvato nella scena originaria.

Conclusione

Creare un’istanza può essere utile quando vuoi creare più copie dello stesso oggetto. C’è anche la possibilità di creare istanze dal codice usando GDScript, vedi Scripting (continuazione).