title: Свойства
Defold предоставляет для игровых объектов, компонентов и GUI-нод свойства, которые можно считывать, устанавливать и анимировать. Существуют следующие типы свойств:
В зависимости от того, где находится свойство, доступ к нему осуществляется через общую функцию или функцию, специфичную для данного свойства. Многие свойства могут быть автоматически анимированы. Анимация свойств с помощью встроенной системы настоятельно рекомендуется вместо самостоятельного манипулирования свойствами (внутри функции update()), как по соображениям производительности, так и ради удобства.
Составные свойства типа vector3, vector4 или quaternion также раскрывают свои субкомпоненты (x, y, z и w). К этим компонентам можно обращаться по отдельности, дополняя имя точкой (.) и именем компонента. Например, чтобы установить х-компонент позиции игрового объекта:
-- Установите позицию по x для "game_object" в значение 10.
go.set("game_object", "position.x", 10)
Функции go.get(), go.set() и go.animate() принимают в качестве первого параметра ссылку, а в качестве второго --- идентификатор свойства. Ссылка идентифицирует игровой объект или компонент и может быть строкой, хэшем или URL. URL-адреса подробно описаны в руководстве по адрессации. Идентификатор свойства --- это строка или хэш, дающий свойству имя:
-- Установите масштаб по X для спрайта
local url = msg.url("#sprite")
local prop = hash("scale.x")
go.set(url, prop, 2.0)
Для GUI-нод идентификатор ноды предоставляется в качестве первого параметра специфичной для свойства функции:
-- Получить цвет кнопки
local node = gui.get_node("button")
local color = gui.get_color(node)
Все игровые объекты и некоторые типы компонентов имеют свойства, которые можно считывать и манипулировать ими во время выполнения. Считывать эти значения можно с помощью go.get(), а записывать --- с помощью go.set(). В зависимости от типа значения свойства, значения можно анимировать с помощью go.animate(). Небольшой набор свойств доступен только для чтения.
get{.mark}
: С помощью go.get() можно считывать.
get+set{.mark}
: С помощью go.get() можно считывать, записывать --- с помощью go.set(). Числовые значения можно анимировать с помощью go.animate().
::: sidenote
Существуют также легаси-функции для чтения и записи свойств игровых объектов. Это go.get_position(), go.set_position(), go.get_rotation(), go.set_rotation() и др.
:::
СВОЙСТВА ИГРОВОГО ОБЪЕКТА
| Свойство | Описание | Тип | |
|---|---|---|---|
| position | Локальная позиция игрового объекта | vector3 |
get+set{.mark} |
| rotation | Локальное вращение игрового объекта, выраженное в виде кватерниона | quaternion |
get+set{.mark} |
| euler | Локальное вращение игрового объекта в углах Эйлера | vector3 |
get+set{.mark} |
| scale | Локальное неоднородное масштабирование игрового объекта, выраженное в виде вектора, каждый компонент которого содержит множитель по каждой оси. Чтобы удвоить размер по осям x и y, предоставьте vmath.vector3(2.0, 2.0, 0) | vector3 |
get+set{.mark} |
| scale.xy | Локальный неравномерный масштаб игрового объекта, выраженный в виде вектора, где каждая компонента содержит множитель вдоль оси X и Y. | vector3 | get+set{.mark} |
СВОЙСТВА КОМПОНЕНТА SPRITE
| свойство | описание | тип | |
|---|---|---|---|
| size | Немасштабированный размер спрайта — его размер, взятый из исходного атласа. | vector3 |
get{.mark} |
| image | Хэш пути к текстуре спрайта. | hash |
get{.mark} |
| scale | Неравномерный масштаб спрайта. | vector3 |
get+set{.mark} |
| scale.xy | Неравномерный масштаб спрайта вдоль осей X и Y. | vector3 |
get+set{.mark} |
| material | Материал, используемый спрайтом. | hash |
get+set{.mark} |
| cursor | Положение (от 0 до 1) курсора воспроизведения. | number |
get+set{.mark} |
| playback_rate | Частота кадров анимации flipbook. | number |
get+set{.mark} |
СВОЙСТВА КОМПОНЕНТА COLLISION OBJECT
| Свойство | Описание | Тип | |
|---|---|---|---|
| mass | Масса объекта столкновения | number |
get{.mark} |
| linear_velocity | Текущая линейная скорость объекта столкновения | vector3 |
get{.mark} |
| angular_velocity | Текущая угловая скорость объекта столкновения | vector3 |
get{.mark} |
| linear_damping | Линейное затухание объекта столкновения | vector3 |
get+set{.mark} |
| angular_damping | Угловое затухание объекта столкновения | vector3 |
get+set{.mark} |
СВОЙСТВА КОМПОНЕНТА SPINE MODEL
| Свойство | Описание | Тип | |
|---|---|---|---|
| animation | Текущая анимация | hash |
get{.mark} |
| skin | Текущий примененный скин модели (не может быть анимирован!) | hash |
get+set{.mark} |
| cursor | Текущее положение (от 0 до 1) курсора воспроизведения анимации | number |
get+set{.mark} |
| playback_rate | Скорость воспроизведения анимации. Множитель к скорости воспроизведения анимации | number |
get+set{.mark} |
СВОЙСТВА КОМПОНЕНТА MODEL (3D)
| Свойство | Описание | Тип | |
|---|---|---|---|
| animation | Текущая анимация. | hash |
get{.mark} |
| texture0 | Хэш пути текстуры модели | hash |
get{.mark} |
| cursor | Позиция (между 0--1) курсора воспроизведения | number |
get+set{.mark} |
| playback_rate | Скорость воспроизведения анимации. Множитель к скорости воспроизведения анимации | number |
get+set{.mark} |
СВОЙСТВА КОМПОНЕНТА LABEL
| Свойство | Описание | Тип | |
|---|---|---|---|
| scale | Масштаб метки | vector3 |
get+set{.mark} |
| scale.xy | Масштаб надписи (label) вдоль осей X и Y. | vector3 |
get+set{.mark} |
| color | Цвет метки | vector4 |
get+set{.mark} |
| outline | Цвет контура метки | vector4 |
get+set{.mark} |
| shadow | Цвет тени метки | vector4 |
get+set{.mark} |
| size | Размер метки. Размер будет ограничивать текст, если включен перенос строки | vector3 |
get+set{.mark} |
GUI-ноды также содержат свойства, но они считываются и записываются через специальные функции --- так называемые "геттеры" и "сеттеры". Для каждого свойства существует одна get-функция и одна set-функция. Также определен набор констант, которые используются в качестве ссылок на свойства при их анимировании. Если необходимо сослаться на отдельные компоненты свойства, следует использовать строковое имя свойства или хэш строкового имени.
position (или gui.PROP_POSITION)rotation (или gui.PROP_ROTATION)scale (или gui.PROP_SCALE)color (или gui.PROP_COLOR)outline (или gui.PROP_OUTLINE)shadow (или gui.PROP_SHADOW)size (или gui.PROP_SIZE)fill_angle (или gui.PROP_FILL_ANGLE)inner_radius (или gui.PROP_INNER_RADIUS)slice9 (или gui.PROP_SLICE9)Следует отметить, что все значения цвета кодируются в vector4, компоненты которого соответствуют значениям RGBA:
x
: Компонент красного цвета
y
: Компонент зеленого цвета
z
: Компонент синего цвета
w
: Компонент прозрачности (alpha)
СВОЙСТВА GUI-НОД
| Свойство | Описание | Тип | |
|---|---|---|---|
| color | Цвет грани ноды | vector4 |
gui.get_color() gui.set_color() |
| outline | Цвет контура ноды | vector4 |
gui.get_outline() gui.set_outline() |
| position | Положение ноды | vector3 |
gui.get_position() gui.set_position() |
| rotation | Вращение ноды, выраженное в углах Эйлера --- градусах, повернутых вокруг каждой оси | vector3 |
gui.get_rotation() gui.set_rotation() |
| scale | Масштаб ноды, выраженный в виде множителя по каждой оси | vector3 |
gui.get_scale() gui.set_scale() |
| shadow | Цвет тени ноды | vector4 |
gui.get_shadow() gui.set_shadow() |
| size | Немасштабируемый размер ноды | vector3 |
gui.get_size() gui.set_size() |
| fill_angle | Угол заливки ноды Pie, выраженный в градусах против часовой стрелки | number |
gui.get_fill_angle() gui.set_fill_angle() |
| inner_radius | Внутренний радиус ноды Pie | number |
gui.get_inner_radius() gui.set_inner_radius() |
| slice9 | The edge distances of a slice9 node. | vector4 |
gui.get_slice9() gui.set_slice9() |