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
Un componente di collisione può usare più forme primitive oppure una singola forma complessa.
Le forme primitive sono parallelepipedo, sfera e capsula. Per aggiungere una forma primitiva, fai clic con il pulsante destro sull’oggetto di collisione e seleziona Add Shape:

Un parallelepipedo ha una posizione, una rotazione e delle dimensioni (larghezza, altezza e profondità):

Una sfera ha una posizione, una rotazione e un diametro:

Una capsula ha una posizione, una rotazione, un diametro e un’altezza:

Le forme a capsula sono supportate solo quando si usa la fisica 3D (configurata nella sezione Physics del file game.project).
Una forma complessa può essere creata da un componente mappa di tile oppure da una forma a inviluppo convesso.
Defold include una funzionalità che consente di generare facilmente forme fisiche per la sorgente di tile usata da una mappa di tile. Il manuale delle sorgenti di tile spiega come aggiungere gruppi di collisione a una sorgente di tile e assegnare i tile ai gruppi di collisione (esempio).
Per aggiungere le collisioni a una mappa di tile:

Tieni presente che la proprietà Group non viene usata in questo caso, poiché i gruppi di collisione sono definiti nella sorgente di tile della mappa di tile.
Defold include una funzionalità che consente di creare una forma a inviluppo convesso a partire da tre o più punti.
.convexshape) usando un editor esterno.Il formato dei file di inviluppo convesso usa lo stesso formato dati di tutti gli altri file Defold, cioè il formato testuale Protobuf. Una forma a inviluppo convesso definisce i punti dell’inviluppo. Nella fisica 2D, i punti devono essere forniti in senso antiorario. In modalità fisica 3D viene usata una nuvola di punti astratta. Esempio 2D:
shape_type: TYPE_HULL
data: 200.000
data: 100.000
data: 0.0
data: 400.000
data: 100.000
data: 0.0
data: 400.000
data: 300.000
data: 0.0
data: 200.000
data: 300.000
data: 0.0
L’esempio precedente definisce i quattro vertici di un rettangolo:
200x300 400x300
4---------3
| |
| |
| |
| |
1---------2
200x100 400x100
Esistono diversi strumenti esterni che si possono usare per creare forme di collisione:
L’oggetto di collisione e le sue forme ereditano la scala dell’oggetto di gioco. Per disattivare questo comportamento, deseleziona la casella Allow Dynamic Transforms nella sezione Physics di game.project. Tieni presente che è supportata solo la scala uniforme e che, se la scala non è uniforme, verrà usato il valore di scala più piccolo.
Le forme di un oggetto di collisione possono essere ridimensionate durante l’esecuzione usando physics.set_shape(). Esempio:
-- set capsule shape data
local capsule_data = {
type = physics.SHAPE_TYPE_CAPSULE,
diameter = 10,
height = 20,
}
physics.set_shape("#collisionobject", "my_capsule_shape", capsule_data)
-- set sphere shape data
local sphere_data = {
type = physics.SHAPE_TYPE_SPHERE,
diameter = 10,
}
physics.set_shape("#collisionobject", "my_sphere_shape", sphere_data)
-- set box shape data
local box_data = {
type = physics.SHAPE_TYPE_BOX,
dimensions = vmath.vector3(10, 10, 5),
}
physics.set_shape("#collisionobject", "my_box_shape", box_data)
Sull’oggetto di collisione deve già esistere una forma del tipo corretto con l’ID specificato.
Le forme di collisione nella fisica 3D possono essere ruotate attorno a tutti gli assi.
Le forme di collisione nella fisica 2D possono essere ruotate solo attorno all’asse z. La rotazione attorno all’asse x o y produce risultati errati e va evitata, anche quando si ruota di 180 gradi per ribaltare di fatto la forma lungo l’asse x o y. Per ribaltare una forma fisica, si consiglia di usare physics.set_hlip(url, flip) e physics.set_vlip(url, flip).
Puoi attivare il debug della fisica per visualizzare le forme di collisione durante l’esecuzione.