Manuals
Manuals




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

Componentes

Los componentes se usan para dar una expresión y/o funcionalidad específicas a los objetos de juego. Los componentes deben estar contenidos dentro de objetos de juego y se ven afectados por la posición, rotación y escala del objeto de juego que contiene el componente:

Componentes

Muchos componentes tienen propiedades específicas de su tipo que pueden manipularse, y hay funciones específicas del tipo de componente disponibles para interactuar con ellos en tiempo de ejecución:

-- deshabilita el sprite "body" de "can"
msg.post("can#body", "disable")

-- reproduce el sonido "hoohoo" en "bean" en 1 segundo
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )

Los componentes se agregan en el lugar dentro de un objeto de juego, o se agregan a un objeto de juego como referencia a un archivo de componente:

Haz click derecho en el objeto de juego en la vista Outline y selecciona Add Component (agregar en el lugar) o Add Component File (agregar como referencia de archivo).

En la mayoría de los casos tiene más sentido crear componentes en el lugar, pero los siguientes tipos de componente deben crearse en archivos de recursos separados antes de agregarlos por referencia a un objeto de juego:

  • Script
  • GUI
  • Particle FX
  • Tile Map

Tipos de componentes

Defold admite los siguientes tipos de componentes:

  • Collection factory - Genera colecciones
  • Collection proxy - Carga y descarga colecciones
  • Collision object - Físicas 2D y 3D
  • Camera - Cambia la ventana de visualización y la proyección del mundo del juego
  • Factory - Genera objetos de juego
  • GUI - Renderiza una interfaz gráfica de usuario
  • Label - Renderiza un fragmento de texto
  • Mesh Muestra un mesh 3D (con creación y manipulación en tiempo de ejecución)
  • Model Muestra un modelo 3D (con animaciones opcionales)
  • Particle FX - Genera partículas
  • Script - Añade lógica del juego
  • Sound - Reproduce sonido o música
  • Sprite - Muestra una imagen 2D (con animación flipbook opcional)
  • Tilemap - Muestra una cuadrícula de tiles

Se pueden añadir componentes adicionales mediante extensiones:

Habilitar y deshabilitar componentes

Los componentes de un objeto de juego se habilitan cuando se crea el objeto de juego. Si quieres deshabilitar un componente, esto se hace enviando un mensaje disable al componente:

-- deshabilita el componente con id 'weapon' en el mismo objeto de juego que este script
msg.post("#weapon", "disable")

-- deshabilita el componente con id 'shield' en el objeto de juego 'enemy'
msg.post("enemy#shield", "disable")

-- deshabilita todos los componentes del objeto de juego actual
msg.post(".", "disable")

-- deshabilita todos los componentes del objeto de juego 'enemy'
msg.post("enemy", "disable")

Para volver a habilitar un componente, puedes enviar un mensaje enable al componente:

-- habilita el componente con id 'weapon'
msg.post("#weapon", "enable")

Propiedades de los componentes

Todos los tipos de componentes de Defold tienen propiedades diferentes. El panel Properties del editor mostrará las propiedades del componente seleccionado actualmente en el panel Outline. Consulta los manuales de los distintos tipos de componentes para aprender más sobre las propiedades disponibles.

Posición, rotación y escala de los componentes

Los componentes visuales suelen tener una propiedad de posición y una de rotación, y con frecuencia también una propiedad de escala. Estas propiedades se pueden cambiar desde el editor y, en casi todos los casos, no se pueden cambiar en tiempo de ejecución (la única excepción es la escala de los componentes sprite y label, que se puede cambiar en tiempo de ejecución).

Si necesitas cambiar la posición, la rotación o la escala de un componente en tiempo de ejecución, modifica en su lugar la posición, la rotación o la escala del objeto de juego al que pertenece el componente. Esto tiene el efecto secundario de que todos los componentes del objeto de juego se verán afectados. Si quieres manipular solo un componente de entre muchos adjuntos a un objeto de juego, se recomienda mover el componente en cuestión a un objeto de juego separado y añadirlo como objeto de juego hijo al objeto de juego al que pertenecía originalmente.

Orden de dibujo de los componentes

El orden de dibujo de los componentes visuales depende de dos cosas:

Predicados del script de render

A cada componente se le asigna un material y cada material tiene una o más etiquetas (tags). El script de render, a su vez, define una serie de predicados, cada uno coincidente con una o más etiquetas de material. En la función update() del script de render, los predicados se dibujan uno por uno y se dibujarán los componentes que coincidan con las etiquetas definidas en cada predicado. El script de render predeterminado primero dibujará sprites y tilemaps en una pasada, luego efectos de partículas en otra pasada, ambos en espacio del mundo. Después, el script de render procederá a dibujar componentes GUI en una pasada separada en espacio de pantalla.

Valor Z del componente

Todos los objetos de juego y componentes se posicionan en espacio 3D, con posiciones expresadas como objetos vector3. Cuando ves el contenido gráfico de tu juego en 2D, los valores X e Y determinan la posición de un objeto sobre los ejes de “anchura” y “altura”, y la posición Z determina la posición sobre el eje de “profundidad”. La posición Z te permite controlar la visibilidad de objetos superpuestos: un sprite con un valor Z de 1 aparecerá delante de un sprite en la posición Z 0. De forma predeterminada, Defold usa un sistema de coordenadas que permite valores Z entre -1 y 1:

modelo

Los componentes que coinciden con un predicado de render se dibujan juntos, y el orden en que se dibujan depende del valor Z final del componente. El valor Z final de un componente es la suma de los valores Z del propio componente, del objeto de juego al que pertenece y del valor Z de cualquier objeto de juego padre.

El orden en que se dibujan múltiples componentes GUI no lo determina el valor Z de los componentes GUI. El orden de dibujo de los componentes GUI se controla con la función gui.set_render_order().

Ejemplo: Dos objetos de juego A y B. B es hijo de A. B tiene un componente sprite.

Elemento Valor Z
A 2
B 1
B#sprite 0.5

Con la jerarquía anterior, el valor Z final del componente sprite en B es 2 + 1 + 0.5 = 3.5.

Si dos componentes tienen exactamente el mismo valor Z, el orden no está definido y puedes acabar con componentes que parpadean alternándose, o con componentes que se renderizan en un orden en una plataforma y en otro orden en otra plataforma.

El script de render define un plano cercano y uno lejano para los valores Z. Cualquier componente con un valor Z que quede fuera de este rango no se renderizará. El rango predeterminado es de -1 a 1, pero se puede cambiar fácilmente. La precisión numérica de los valores Z con un límite cercano y lejano de -1 y 1 es muy alta. Al trabajar con assets 3D, puede que necesites cambiar los límites cercano y lejano de la proyección predeterminada en un script de render personalizado. Consulta el manual de render para más información.

Optimizaciones de max count de componentes

El archivo de configuración game.project contiene muchos valores que especifican la cantidad máxima de un recurso determinado que puede existir al mismo tiempo, a menudo contada por colección cargada (también llamada mundo). El motor Defold usará estos valores máximos para preasignar la memoria necesaria para esa cantidad, y así evitar asignaciones dinámicas y fragmentación de memoria mientras el juego se ejecuta.

Las estructuras de datos de Defold usadas para representar componentes y otros recursos están optimizadas para usar la menor cantidad de memoria posible, pero aun así se debe tener cuidado al definir los valores para evitar asignar más memoria de la realmente necesaria.

Para optimizar aún más el uso de memoria, el proceso de build de Defold analizará el contenido del juego y sobrescribirá los max counts si es posible conocer con certeza la cantidad exacta:

  • Si una colección no contiene componentes factory, se asignará la cantidad exacta de cada componente y Game Object, y se ignorarán los valores de max count.
  • Si una colección contiene un componente factory, se analizarán los objetos generados y se usará el max count para los componentes que puedan generarse desde las factories y para los Game Objects.
  • Si una colección contiene una factory o una factory de colección con la opción “Dynamic Prototype” activada, esta colección usará los contadores máximos.