En el núcleo del diseño de Defold hay unos conceptos que pueden llevar tiempo dominarlos. Este manual explica en qué consisten los bloques de construcción de Defold. Después de leer este manual, sigue al addressing manual y al message passing manual. También hay una serie de tutoriales disponibles desde el editor para tenerte listo rápidamente.
Hay tres tipos básicos de bloques de construcción que puedes usar para construir un juego de Defold:
Las colecciones son estructuras de arbol que contienen objetos y otras colecciones. Una colección siempre estará guardada en archivo.
Cuando el motor Defold inicia, carga una colección bootstrap especificado en el archivo de configuración game.project.La colección bootstrap es normalmente llamada “main.collection” pero eres libre de elegir cualquier nombre que prefieras.
Una colección puede contener objetos y otras colecciones (por referencia al archivo de subcolecciones), anidados abritrariamente profundos. Aquí hay un archivo ejemplo llamado “main.collection”. Contiene un objeto (con la id “can”) y una sub-colección (con la id “bean”). La sub-colección, en turno, contiene dos objetos: “bean” y “shield”.
Fíjate que la sub-colección con la id “bean” está guardada en su propio arcivo, llamado “/main/bean.collection” y es únicamente referenciado en “main.collection”:
No puedes dirigir colecciones por sí mismas ya que no hay objetos runtime correspondiendo a las colecciones “main” y “bean”. Sin embargo, a veces puedes usar la identidad de una colección como parte de una ruta(en inglés path) a un objeto (ver el addressing manual para más detalles):
-- file: can.script
-- get position of the "bean" game object in the "bean" collection
local pos = go.get_position("bean/bean")
Una colección siempre es añadida a otra colección como referencia a un archivo de colección:
Click derecho a la colección en la Outline view y selecciona Add Collection File.
Los objetos del juego son objetos simples con un tiempo de vida separado cada uno durante la ejecución de tu juego. Los objetos del juego tienen una posición, rotación y escala que cada uno puede ser manipulado y animado en la ejecución.
-- animate X position of "can" game object
go.animate("can", "position.x", go.PLAYBACK_LOOP_PINGPONG, 100, go.EASING_LINEAR, 1.0)
Los objetos del juego pueden usarse vacíos (como marcadores de posición, por instancia) pero son equipados usualmente con varios componentes, como sprites, sonidos, scripts, modelos, fábricas y más. Son creados ya sea en el editor, puestos en archivos de colección, o aparecidos dinámicamente en la ejecución a través de componentes factory.
Los objetos del juego son ya sea añadidos en una colección, o añadidos en una colección como referencia a un archivo de objeto de juego:
Click derecho a la colección en la Outline view y selecciona Add Game Object (añadir en el lugar) o Add Game Object File (añadir como referencia de archivo).
Components are used to give specific expression and/or functionality to game objects. Components have to be contained inside game objects and are affected by the position, rotation and scale of the game object that contains the component:
Many components have type specific properties that can be manipulated and there are component type specific functions available for interacting with them in runtime:
-- disable the can "body" sprite
msg.post("can#body", "disable")
-- play "hoohoo" sound on "bean" in 1 second
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )
Components are either added in-place in a game object, or added to a game object as a reference to a component file:
Right-click the game object in the Outline view and select Add Component (add in-place) or Add Component File (add as file reference).
In most cases it makes most sense to create components in-place, but the following component types must be created in separate resource files before being added by reference to a game object:
Refiere al component overview para una lista de todos los tipos de componentes..
Cuando creas una colección, objeto de juego o componente file, tu creas un plano (blueprint), o prototipo. Esto solo añade un archivo al proyecto a la estructura de archivos, nada es añadido a tu juego en ejecución. Para añadir una instancia de una colección, objeto de juego o componente basado en un archivo blueprint, añades una instancia de ello en uno de tus archivos de colección.
Puedes ver cual instancia de objeto está basado de cual archivo en outline view. El archivo “main.collection” contiene tres instancias que son basadas en archivos:
El beneficio de crear archivos blueprint se vuelve aparente cuando tienes múltiples instancias de un objeto de juego o colección y deseas cambiar todos:
Al cambiar el archivo file, cualquier instancia que usa ese archivo será actualizado inmediatamente.
En un archivo de colección, puedes crear jerarquías de objetos de juego de tal forma que uno o más objetos sean hijos (children) de un objeto de juego padre (parent). Simplemente arrastrando un objeto de juego y soltarlo en otro el objeto de juego arrastrado se vuelve el hijo bajo el objeto seleccionado:
Las jerarquías padre-hijo de objetos es una relación dinámica que afecta cómo los objetos reaccionan a las transformaciones. Cualquier transformación (movimiento, rotación o escalado) aplicado a un objeto será aplicado al hijo del objeto en turno, ambos en el editor y en la ejecución:
De manera conversa, la traslación de un hijo será hecha en el espacio local del padre. En el editor, puedes elegir el editar un objeto de juego hijo en el espacio local o el mundo (world space) seleccionando Edit ▸ World Space (por defecto) o Edit ▸ Local Space.
También es posible alterar el padre de un objeto en la ejecución enviando un mensaje set_parent
al objeto.
local parent = go.get_id("bean")
msg.post("child_bean", "set_parent", { parent_id = parent })
e Un malentendido común es que el lugar de un objeto de juego en la jerarquía de la colección cambia cuando se vuelve parte de una jerarquía padre-hijo. Sin embargo, estos son dos cosas diferentes. Las jerarquías padre-hijo alteran gráficamente la escena que permite que objetos estén visualmente unidos entre sí. La única cosa que dicta la dirección de un objeto de juego es su lugar en la colección. La dirección es estática a través de la vida del objeto.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB