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
Defold include Box2D per le simulazioni fisiche 2D e Bullet per la fisica 3D. L’impostazione Physics 2D dell’App Manifest permette di selezionare Box2D Version 3, Box2D (Legacy Defold version) o None. L’implementazione precedente è quella predefinita; Box2D 3 deve essere abilitato esplicitamente. Cambiare implementazione può modificare i risultati della simulazione e richiedere una nuova regolazione delle impostazioni di progetto di Box2D specifiche della versione.
Il flusso di lavoro basato su componenti per gli oggetti di collisione e il modulo physics descritti in questi manuali funzionano con entrambe le implementazioni di Box2D; selezionando None si rimuove la fisica 2D. Defold espone anche le API di livello inferiore b2d, b2d.body, b2d.fixture, b2d.shape, b2d.joint, b2d.chain e b2d.world per accedere direttamente a corpi, forme, giunti, catene e mondi 2D. Non tutte le funzioni di basso livello sono disponibili in entrambe le implementazioni di Box2D; verifica la documentazione API generata di ogni funzione in relazione all’implementazione selezionata nell’App Manifest.
I concetti principali dei motori fisici usati in Defold sono:
Oltre agli oggetti di collisione stessi, puoi anche definire vincoli tra gli oggetti di collisione, più comunemente chiamati giunti, per collegare due oggetti di collisione e limitarne il movimento o, in altri modi, applicare forze e influenzarne il comportamento nella simulazione fisica. Scopri di più sui giunti.
Puoi anche interrogare il mondo fisico e leggerne le informazioni lungo un raggio rettilineo, tramite un’operazione chiamata proiezione di un raggio (ray cast). Scopri di più sulle proiezioni di raggi.
Il motore fisico simula la fisica newtoniana ed è progettato per funzionare bene con le unità metri, chilogrammi e secondi (MKS). Inoltre, il motore fisico è ottimizzato per oggetti in movimento con dimensioni comprese tra 0.1 e 10 metri (gli oggetti statici possono essere più grandi) e, per impostazione predefinita, considera 1 unità (pixel) equivalente a 1 metro. Questa conversione tra pixel e metri è comoda a livello di simulazione, ma non è molto utile dal punto di vista della creazione di un gioco. Con le impostazioni predefinite, una forma di collisione di 200 pixel verrebbe considerata grande 200 metri, un valore ben al di fuori dell’intervallo consigliato, almeno per un oggetto in movimento.
In generale, è necessario adattare la scala della simulazione fisica affinché funzioni bene con le dimensioni tipiche degli oggetti di un gioco. Puoi modificare la scala della simulazione fisica in game.project tramite l’impostazione della scala della fisica. Impostando questo valore, per esempio, a 0.02, 200 pixel verrebbero considerati equivalenti a 4 metri. Tieni presente che anche la gravità (modificabile anch’essa in game.project) deve essere aumentata per compensare il cambiamento di scala.
È consigliabile aggiornare il motore fisico a intervalli regolari per garantire una simulazione stabile (invece di aggiornarlo a intervalli potenzialmente irregolari, dipendenti dalla frequenza dei fotogrammi). Puoi usare un aggiornamento a intervallo fisso per la fisica attivando l’impostazione Use Fixed Timestep della sezione Physics nel file game.project. La frequenza di aggiornamento è controllata dall’impostazione Fixed Update Frequency della sezione Engine nel file game.project. Quando usi un intervallo di tempo fisso per la fisica, è consigliabile usare anche la funzione del ciclo di vita fixed_update(self, dt) per interagire con gli oggetti di collisione del gioco, per esempio quando applichi loro delle forze.