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
Si haces un juego muy pequeño, es posible que las limitaciones de la plataforma objetivo (uso de memoria, tamaño de bundle, potencia de cómputo y consumo de batería) nunca supongan un problema. Sin embargo, al crear juegos más grandes, y especialmente en dispositivos portátiles, el consumo de memoria probablemente será una de las mayores restricciones. Un equipo con experiencia elaborará cuidadosamente presupuestos de recursos en función de las restricciones de la plataforma. Defold proporciona varias funcionalidades para ayudar a gestionar la memoria y el tamaño de bundle. Este manual ofrece una visión general de estas funcionalidades.
Cuando creas un juego en Defold, declaras estáticamente el árbol de recursos. Todas las partes del juego se enlazan en el árbol, empezando por la colección bootstrap (normalmente llamada “main.collection”). El árbol de recursos sigue todas las referencias e incluye todos los recursos asociados con esas referencias:

Defold también tiene el concepto de recursos de bundle. Los recursos de bundle se incluyen con el bundle de la aplicación, pero no forman parte del árbol de recursos. Los recursos de bundle pueden ser cualquier cosa, desde archivos de soporte específicos de plataforma hasta archivos externos cargados desde el sistema de archivos y usados por tu juego (por ejemplo, bancos de sonido FMOD).
Cuando se crea el bundle del juego, solo se incluirá lo que está en el árbol de recursos. Todo lo que no esté referenciado en el árbol queda fuera. No hay necesidad de seleccionar manualmente qué incluir o excluir del bundle.
Cuando el juego se ejecuta, el motor empieza en la raíz bootstrap del árbol y carga recursos en memoria:
Sin embargo, el motor no cargará automáticamente los siguientes tipos de recursos referenciados en runtime:
sys.load_resource().La forma predeterminada en que Defold crea bundles y carga recursos puede modificarse para dar un control detallado sobre cómo y cuándo los recursos entran en memoria.

Los recursos referenciados por componentes factory normalmente se cargan en memoria cuando se carga el componente. Luego los recursos quedan listos para generar instancias en el juego en cuanto la factory existe en el runtime. Para cambiar el comportamiento predeterminado y posponer la carga de recursos de factory, simplemente puedes marcar una factory con la casilla Load Dynamically.

Con esta casilla marcada, el motor seguirá incluyendo los recursos referenciados en el bundle del juego, pero no cargará automáticamente los recursos de factory. En su lugar, tienes dos opciones:
factory.create() o collectionfactory.create() cuando quieras generar objetos. Esto cargará los recursos de forma síncrona y luego generará nuevas instancias.factory.load() o collectionfactory.load() para cargar los recursos de forma asíncrona. Cuando los recursos estén listos para generar instancias, se recibe un callback.Consulta el manual de Factory y el manual de factory de colección para obtener más detalles sobre cómo funciona.
Defold mantiene contadores de referencia para todos los recursos. Si el contador de un recurso llega a cero, significa que ya nada hace referencia a él. Entonces el recurso se descarga automáticamente de la memoria. Por ejemplo, si eliminas todos los objetos generados por una factory y también eliminas el objeto que contiene el componente factory, los recursos a los que antes hacía referencia la factory se descargan de la memoria.
Para las factories marcadas con Load Dynamically, puedes llamar a la función factory.unload() o collectionfactory.unload(). Esta llamada elimina la referencia del componente factory al recurso. Si nada más hace referencia al recurso (por ejemplo, si se eliminaron todos los objetos generados), el recurso se descargará de la memoria.
Con proxies de colección, es posible dejar fuera del proceso de creación del bundle todos los recursos a los que hace referencia el componente. Esto es útil si necesitas mantener el tamaño del bundle al mínimo. Por ejemplo, al ejecutar juegos en la web como HTML5, el navegador descargará todo el bundle antes de ejecutar el juego.

Al marcar un proxy de colección como Exclude, el recurso referenciado quedará fuera del bundle del juego. En su lugar, puedes almacenar las colecciones excluidas en un servicio de almacenamiento en la nube seleccionado. El manual de Live update explica cómo funciona esta funcionalidad.