Manuals
Manuals




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

Elementi fondamentali

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.

Elementi fondamentali

Per costruire un gioco con Defold utilizzi tre tipi di elementi fondamentali:

Collezione (collection)
Una collezione è un file usato per strutturare il gioco. Nelle collezioni costruisci gerarchie di oggetti di gioco e altre collezioni. In genere vengono usate per strutturare livelli di gioco, gruppi di nemici o personaggi composti da più oggetti di gioco.
Oggetto di gioco (game object)
Un oggetto di gioco è un contenitore dotato di ID, posizione, rotazione e scala. Serve a contenere componenti. In genere gli oggetti di gioco vengono usati per creare i personaggi del giocatore, proiettili, il sistema di regole del gioco o un sistema di caricamento dei livelli.
Componente (component)
I componenti sono entità inserite negli oggetti di gioco per dar loro una rappresentazione visiva, sonora e/o logica nel gioco. In genere vengono usati per creare gli sprite dei personaggi, file di script, aggiungere effetti sonori o effetti particellari.

Collezioni

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”.

Collezione

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:

Collezione bean

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.

Oggetti di gioco

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).

Componenti

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:

Componenti

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:

  • Script
  • GUI
  • Particle FX
  • Tile Map

Consulta la panoramica dei componenti per un elenco di tutti i tipi di componenti disponibili.

Oggetti aggiunti direttamente o per riferimento

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:

  1. La sottocollezione “bean”.
  2. Il componente script “bean” nell’oggetto di gioco “bean” della sottocollezione “bean”.
  3. Il componente script “can” nell’oggetto di gioco “can”.

Istanza

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:

Istanze di oggetti di gioco

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

Modifica del prototipo di un oggetto di gioco

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

Istanze di oggetti di gioco aggiornate

Gerarchie genitore-figlio tra oggetti di gioco

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:

Gerarchie genitore-figlio tra oggetti di gioco

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:

Trasformazione di un figlio

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.