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
Se realizzi un gioco molto piccolo, i limiti della piattaforma di destinazione (occupazione della memoria, dimensioni del bundle, potenza di calcolo e consumo della batteria) potrebbero non creare mai problemi. Quando realizzi giochi più grandi, invece, soprattutto per dispositivi portatili, il consumo di memoria sarà probabilmente uno dei vincoli principali. Un team esperto stabilisce con cura i budget delle risorse in base ai limiti della piattaforma. Defold offre diverse funzionalità per aiutarti a gestire la memoria e le dimensioni del bundle. Questo manuale ne fornisce una panoramica.
Quando crei una build di un gioco in Defold, dichiari staticamente l’albero delle risorse. Ogni parte del gioco è collegata all’albero, a partire dalla collezione di bootstrap (di solito chiamata “main.collection”). L’albero delle risorse segue tutti i riferimenti e include tutte le risorse a essi associate:

Defold prevede anche il concetto di risorse del bundle. Queste risorse vengono incluse nel bundle dell’applicazione, ma non fanno parte dell’albero delle risorse. Possono comprendere file di supporto specifici della piattaforma o file esterni caricati dal file system e utilizzati dal gioco (per esempio, banchi di suoni FMOD).
Quando crei il bundle del gioco, viene incluso soltanto ciò che si trova nell’albero delle risorse. Tutto ciò che non è referenziato nell’albero viene escluso. Non occorre selezionare manualmente cosa includere o escludere dal bundle.
Quando il gioco viene eseguito, il motore parte dalla radice di bootstrap dell’albero e carica in memoria le risorse:
Il motore, tuttavia, non carica automaticamente durante l’esecuzione i seguenti tipi di risorse referenziate:
sys.load_resource().Puoi modificare il comportamento predefinito con cui Defold include le risorse nel bundle e le carica, per controllare in dettaglio come e quando entrano in memoria.

Le risorse referenziate dai componenti di fabbrica vengono normalmente caricate in memoria quando viene caricato il componente. Le risorse sono quindi pronte per generare oggetti nel gioco non appena la fabbrica esiste nel runtime. Per modificare il comportamento predefinito e rimandare il caricamento delle risorse di una fabbrica, basta selezionare la sua casella Load Dynamically.

Con questa casella selezionata, il motore include comunque le risorse referenziate nel bundle del gioco, ma non carica automaticamente le risorse della fabbrica. Hai invece due possibilità:
factory.create() o collectionfactory.create() quando vuoi generare oggetti. Le risorse vengono caricate in modo sincrono, dopodiché vengono generate nuove istanze.factory.load() o collectionfactory.load() per caricare le risorse in modo asincrono. Quando le risorse sono pronte per generare oggetti, viene invocata una callback.Consulta il manuale sulle fabbriche e il manuale sulle fabbriche di collezioni (collection factory) per i dettagli sul funzionamento.
Defold mantiene un contatore dei riferimenti per ogni risorsa. Se il contatore di una risorsa raggiunge zero, significa che non ci sono più riferimenti a essa. La risorsa viene quindi scaricata automaticamente dalla memoria. Per esempio, se elimini tutti gli oggetti generati da una fabbrica e anche l’oggetto che contiene il componente di fabbrica, le risorse a cui la fabbrica faceva riferimento vengono scaricate dalla memoria.
Per le fabbriche con l’opzione Load Dynamically selezionata, puoi chiamare la funzione factory.unload() o collectionfactory.unload(). Questa chiamata rimuove il riferimento del componente di fabbrica alla risorsa. Se non ci sono altri riferimenti alla risorsa (per esempio, se tutti gli oggetti generati sono stati eliminati), la risorsa viene scaricata dalla memoria.
Con i proxy di collezione, puoi escludere dal processo di creazione del bundle tutte le risorse a cui il componente fa riferimento. È utile se devi ridurre al minimo le dimensioni del bundle. Per esempio, quando esegui giochi sul web in HTML5, il browser scarica l’intero bundle prima di eseguire il gioco.

Selezionando l’opzione Exclude di un proxy di collezione, la risorsa referenziata viene esclusa dal bundle del gioco. Puoi invece archiviare le collezioni escluse su un servizio di archiviazione cloud a tua scelta. Il manuale su Live Update spiega come funziona questa funzionalità.