This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Alla base della progettazione di Defold ci sono alcuni concetti che è molto importante comprendere bene. Questo manuale spiega quali sono gli elementi fondamentali di Defold. Dopo averlo letto, prosegui con il manuale sull’indirizzamento e il manuale sullo scambio di messaggi. Nell’editor è disponibile anche una serie di tutorial per iniziare rapidamente.

Per costruire un gioco con Defold utilizzi tre tipi di elementi fondamentali:
Le collezioni sono strutture ad albero che contengono oggetti di gioco e altre collezioni. Una collezione viene sempre salvata in un file.
All’avvio, il motore Defold carica una singola collezione di bootstrap, specificata nel file delle impostazioni game.project. La collezione di bootstrap si chiama spesso “main.collection”, ma puoi usare il nome che preferisci.
Una collezione può contenere oggetti di gioco e altre collezioni (tramite un riferimento al file della sottocollezione), annidate a qualsiasi profondità. Ecco un file di esempio chiamato “main.collection”. Contiene un oggetto di gioco (con ID “can”) e una sottocollezione (con ID “bean”). La sottocollezione, a sua volta, contiene due oggetti di gioco: “bean” e “shield”.

Nota che la sottocollezione con ID “bean” è salvata in un proprio file, chiamato “/main/bean.collection”, e in “main.collection” è presente soltanto un riferimento ad essa:

Non puoi indirizzare direttamente le collezioni, perché durante l’esecuzione non esistono oggetti corrispondenti alle collezioni “main” e “bean”. Tuttavia, a volte devi usare l’identità di una collezione come parte del percorso di un oggetto di gioco (consulta il manuale sull’indirizzamento per i dettagli):
-- file: can.script
-- get position of the "bean" game object in the "bean" collection
local pos = go.get_position("bean/bean")
Una collezione viene sempre aggiunta a un’altra collezione come riferimento a un file di collezione:
Fai clic con il pulsante destro sulla collezione nella vista Outline e seleziona Add Collection File.
Gli oggetti di gioco sono oggetti semplici, ciascuno con una durata di vita indipendente durante l’esecuzione del gioco. Gli oggetti di gioco hanno una posizione, una rotazione e una scala, tutte modificabili e animabili durante l’esecuzione.
-- animate X position of "can" game object
go.animate("can", "position.x", go.PLAYBACK_LOOP_PINGPONG, 100, go.EASING_LINEAR, 1.0)
Gli oggetti di gioco possono essere usati vuoti (per esempio, come indicatori di posizione), ma di solito sono dotati di vari componenti, come sprite, suoni, script, modelli, fabbriche (factory) e altro ancora. Gli oggetti di gioco vengono creati nell’editor e inseriti nei file di collezione, oppure generati dinamicamente durante l’esecuzione tramite componenti fabbrica.
Gli oggetti di gioco vengono aggiunti direttamente a una collezione oppure come riferimento a un file di oggetto di gioco:
Fai clic con il pulsante destro sulla collezione nella vista Outline e seleziona Add Game Object (aggiunta diretta) o Add Game Object File (aggiunta come riferimento a un file).
I componenti (component) consentono di assegnare agli oggetti di gioco (game object) un aspetto specifico e/o funzionalità specifiche. I componenti devono essere contenuti in oggetti di gioco e risentono della posizione, della rotazione e della scala dell’oggetto di gioco che li contiene:

Molti componenti hanno proprietà specifiche del proprio tipo che possono essere modificate; sono inoltre disponibili funzioni specifiche per ciascun tipo di componente, che consentono di interagire con essi durante l’esecuzione:
-- disable the can "body" sprite
msg.post("can#body", "disable")
-- play "hoohoo" sound on "bean" in 1 second
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )
I componenti vengono aggiunti direttamente a un oggetto di gioco oppure come riferimenti a file di componenti:
Fai clic con il pulsante destro sull’oggetto di gioco nella vista Outline e seleziona Add Component (aggiunta diretta) oppure Add Component File (aggiunta come riferimento a un file).
Nella maggior parte dei casi conviene creare i componenti direttamente nell’oggetto di gioco, ma i seguenti tipi di componenti devono essere creati in file di risorsa separati prima di essere aggiunti a un oggetto di gioco tramite riferimento:
Consulta la panoramica dei componenti per un elenco di tutti i tipi di componenti disponibili.
Quando crei un file di collezione, oggetto di gioco o componente, crei ciò che chiamiamo un prototipo (noto anche come “prefab” o “blueprint” in altri motori). Questa operazione aggiunge soltanto un file alla struttura dei file del progetto, senza aggiungere nulla al gioco in esecuzione. Per aggiungere un’istanza di una collezione, di un oggetto di gioco o di un componente basata su un file di prototipo, aggiungine un’istanza a uno dei tuoi file di collezione.
Nella vista Outline puoi vedere su quale file si basa un’istanza di un oggetto. Il file “main.collection” contiene tre istanze basate su file:

Il vantaggio di creare file di prototipo diventa evidente quando hai più istanze di un oggetto di gioco o di una collezione e vuoi modificarle tutte:

Modificando il file di prototipo, tutte le istanze che usano quel file vengono aggiornate immediatamente.

Qui viene modificata l’immagine dello sprite nel file di prototipo e tutte le istanze che usano il file vengono aggiornate immediatamente:

In un file di collezione puoi costruire gerarchie di oggetti di gioco in cui uno o più oggetti di gioco sono figli di un unico oggetto di gioco genitore. È sufficiente trascinare un oggetto di gioco e rilasciarlo su un altro per rendere l’oggetto trascinato figlio dell’oggetto di destinazione:

Le gerarchie genitore-figlio tra oggetti sono relazioni dinamiche che influiscono sul modo in cui gli oggetti reagiscono alle trasformazioni. Qualsiasi trasformazione (spostamento, rotazione o modifica della scala) applicata a un oggetto viene a sua volta applicata ai suoi figli, sia nell’editor sia durante l’esecuzione:

Le traslazioni di un figlio, invece, avvengono nello spazio locale del genitore. Nell’editor puoi scegliere di modificare un oggetto di gioco figlio nello spazio locale o nello spazio globale selezionando Edit ▸ World Space (l’impostazione predefinita) o Edit ▸ Local Space.
È anche possibile cambiare il genitore di un oggetto durante l’esecuzione inviando all’oggetto un messaggio set_parent.
local parent = go.get_id("bean")
msg.post("child_bean", "set_parent", { parent_id = parent })
Un equivoco comune è pensare che la posizione di un oggetto di gioco nella gerarchia delle collezioni cambi quando entra a far parte di una gerarchia genitore-figlio. Si tratta, invece, di due cose molto diverse. Le gerarchie genitore-figlio modificano dinamicamente il grafo della scena, permettendo di collegare visivamente gli oggetti tra loro. L’unico elemento che determina l’indirizzo di un oggetto di gioco è la sua posizione nella gerarchia delle collezioni. L’indirizzo rimane invariato per tutta la durata di vita dell’oggetto.