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 consente di eseguire l’hot reload delle risorse. Durante lo sviluppo di un gioco, questa funzionalità permette di velocizzare enormemente alcune attività. Puoi modificare il codice e i contenuti di un gioco mentre è in esecuzione. Alcuni casi d’uso comuni sono:
Avvia il gioco dall’editor (Project ▸ Build).
Per ricaricare una risorsa aggiornata, seleziona la voce di menu File ▸ Hot Reload oppure premi la combinazione di tasti corrispondente:

L’hot reload funziona sia sui dispositivi mobili sia su desktop. Per usarlo su un dispositivo mobile, esegui una build di debug del gioco o l’app di sviluppo sul dispositivo, quindi selezionalo come destinazione nell’editor:

Ora, quando crei la build ed esegui il gioco, l’editor carica tutti gli asset nell’app in esecuzione sul dispositivo e avvia il gioco. Da quel momento, ogni file di cui esegui l’hot reload viene aggiornato sul dispositivo.
Per esempio, per aggiungere un paio di pulsanti a una GUI visualizzata in un gioco in esecuzione sul telefono, basta aprire il file GUI:

Aggiungi i nuovi pulsanti, salva ed esegui l’hot reload del file GUI. Ora puoi vedere i nuovi pulsanti sullo schermo del telefono:

Quando esegui l’hot reload di un file, il motore stampa nella console il nome di ogni file di risorsa ricaricato.
Ogni file di script Lua ricaricato viene eseguito nuovamente nell’ambiente Lua in esecuzione.
local my_value = 10
function update(self, dt)
print(my_value)
end
Impostare my_value a 11 ed eseguire l’hot reload del file ha un effetto immediato:
...
DEBUG:SCRIPT: 10
DEBUG:SCRIPT: 10
DEBUG:SCRIPT: 10
INFO:RESOURCE: /main/hunter.scriptc was successfully reloaded.
DEBUG:SCRIPT: 11
DEBUG:SCRIPT: 11
DEBUG:SCRIPT: 11
...
Tieni presente che l’hot reload non modifica l’esecuzione delle funzioni del ciclo di vita. Per esempio, durante l’hot reload non viene chiamata init(). Se però ridefinisci le funzioni del ciclo di vita, vengono utilizzate le nuove versioni.
Se aggiungi variabili all’ambito globale in un file di modulo, ricaricare il file modifica queste variabili globali:
--- my_module.lua
my_module = {}
my_module.val = 10
-- user.script
require "my_module"
function update(self, dt)
print(my_module.val) -- hot reload "my_module.lua" and the new value will print
end
Un modello comune per i moduli Lua consiste nel creare una tabella locale, popolarla e poi restituirla:
--- my_module.lua
local M = {} -- a new table object is created here
M.val = 10
return M
-- user.script
local mm = require "my_module"
function update(self, dt)
print(mm.val) -- will print 10 even if you change and hot reload "my_module.lua"
end
Modificare e ricaricare my_module.lua non cambia il comportamento di user.script. Consulta il manuale sui moduli per scoprire il motivo e come evitare questo problema.
Ogni componente script può definire una funzione on_reload(). Se presente, viene chiamata ogni volta che lo script viene ricaricato. È utile per ispezionare o modificare dati, inviare messaggi e così via:
function on_reload(self)
print(self.velocity)
msg.post("/level#controller", "setup")
end
Quando ricarichi vertex shader e fragment shader, il driver grafico ricompila il codice GLSL e lo carica sulla GPU. Se il codice dello shader provoca un crash, cosa che può accadere facilmente dato che GLSL è scritto a un livello molto basso, anche il motore va in crash.