FAQ
FAQ

Read this FAQ in English

Часто задаваемые вопросы

Общие вопросы

Q: Defold действительно бесплатный?

A: Да, движок и редактор Defold с полной функциональностью полностью бесплатны. Никаких скрытых расходов, платежей или роялти. Просто бесплатно.

Q: Почему вообще Defold Foundation отдаёт Defold бесплатно?

A: Одна из целей Defold Foundation — сделать так, чтобы программное обеспечение Defold было доступно разработчикам по всему миру, а исходный код был доступен бесплатно.

Q: Как долго вы будете поддерживать Defold?

A: Мы серьёзно привержены развитию Defold. Defold Foundation создана таким образом, чтобы ещё много лет существовать как ответственный владелец Defold. Она никуда не исчезнет.

Q: Можно ли доверять Defold для профессиональной разработки?

A: Безусловно. Defold используют всё больше профессиональных разработчиков игр и игровых студий. Посмотрите витрину игр и примеры игр, созданных с помощью Defold.

Q: Какой пользовательский трекинг вы ведёте?

A: Мы собираем анонимные данные об использовании наших сайтов и редактора Defold, чтобы улучшать сервисы и продукт. В играх, которые вы создаёте, пользовательский трекинг отсутствует, если только вы сами не добавите аналитический сервис. Подробнее об этом можно прочитать в нашей Privacy Policy.

Q: Кто создал Defold?

A: Defold создали Ragnar Svensson и Christian Murray. Они начали работать над движком, редактором и серверами в 2009 году. В 2013 году началось партнёрство King и Defold, а в 2014 году King приобрела Defold. Полную историю можно прочитать здесь.

Вопросы о разработке игр

Q: Можно ли делать 3D-игры в Defold?

A: Конечно! Движок является полноценным 3D-движком. Однако набор инструментов ориентирован на 2D, поэтому многое придётся делать вручную. Улучшенная поддержка 3D запланирована.

Вопросы о языках программирования

Q: На каком языке программирования я работаю в Defold?

A: Игровая логика в проекте Defold в первую очередь пишется на Lua (точнее, Lua 5.1/LuaJIT, подробности см. в руководстве по Lua). Lua — это лёгкий динамический язык, быстрый и очень мощный. Начиная с версии 1.8.1, Defold поддерживает использование transpilers, генерирующих Lua-код. Установив расширение transpiler, вы можете использовать альтернативные языки, такие как Teal, чтобы писать статически проверяемый Lua. Также можно использовать native code (C/C++, Objective-C, Java и JavaScript в зависимости от платформы), чтобы расширять движок Defold новой функциональностью. При создании кастомных материалов используется язык шейдеров OpenGL ES SL для написания vertex и fragment shaders.

Q: Можно ли использовать C++ для игровой логики?

A: Поддержка C++ в Defold в основном предназначена для написания нативных расширений, которые работают с SDK сторонних разработчиков или платформенными API. dmSDK (C++ API Defold, используемый в нативных расширениях) будет постепенно расширяться, чтобы можно было при желании писать всю игровую логику на C++. Lua всё равно останется основным языком игровой логики, но с расширением C++ API появится и возможность писать игровую логику на C++. Работа по расширению C++ API в основном заключается в переносе существующих приватных заголовочных файлов в публичную часть и в доработке API для публичного использования.

Q: Можно ли использовать TypeScript с Defold?

A: Официальной поддержки TypeScript нет. Сообщество поддерживает toolkit ts-defold для написания TypeScript и его транспиляции в Lua прямо из VSCode.

Q: Можно ли использовать Haxe с Defold?

A: Официальной поддержки Haxe нет. Сообщество поддерживает hxdefold для написания Haxe и его транспиляции в Lua.

Q: Можно ли использовать C# с Defold?

A: Defold Foundation добавила поддержку C# и сделала её доступной как библиотечную зависимость. C# — широко используемый язык программирования, и он поможет студиям и разработчикам, которые сильно завязаны на C#, перейти на Defold.

Q: Меня беспокоит, что добавление поддержки C# негативно повлияет на Defold. Стоит ли переживать?

Defold НЕ отказывается от Lua как основного языка скриптинга. Поддержка C# добавлена как новый язык для расширений. На сам движок это не повлияет, если только вы сами не решите использовать C#-расширения в проекте.

Поддержка C# будет иметь цену (размер исполняемого файла, производительность во время выполнения и т.д.), но это уже решение конкретного разработчика или студии.

Что касается самого C#, это относительно небольшое изменение, поскольку система расширений уже поддерживает много языков (C/C++/Java/Objective-C/Zig). SDK будут синхронизироваться за счёт генерации C#-bindings. Это позволит поддерживать bindings в актуальном состоянии с минимальными усилиями.

Ранее Defold Foundation была против добавления поддержки C# в Defold, но изменила свою позицию по ряду причин:

  • Студии и разработчики продолжают запрашивать поддержку C#.
  • Поддержка C# ограничена только расширениями (то есть требует немного усилий).
  • Ядро движка не будет затронуто.
  • C# API можно поддерживать синхронизированным с минимальными усилиями, если генерировать его автоматически.
  • Поддержка C# будет основана на DotNet 9 с NativeAOT, что позволит генерировать статические библиотеки, которые сможет линковать существующий build pipeline (как и любое другое расширение Defold).

Вопросы о платформах

Q: На каких платформах работает Defold?

A: Для редактора/инструментов и runtime движка поддерживаются следующие платформы:

Система Версия Архитектуры Поддержка
macOS 11 Big Sur x86-64, arm-64 Редактор и движок
Windows Vista x86-32, x86-64 Редактор и движок
Ubuntu (1) 22.04 LTS x86-64 Редактор
Linux (2) Any x86-64, arm-64 Движок
iOS 15.0 arm-64 x86_64 Движок
Android 5.0 (API level 21) arm-32, arm-64 Движок
HTML5   asm.js, wasm Движок

(1 Редактор собирается и тестируется для 64-битной Ubuntu. Скорее всего, он будет работать и на других дистрибутивах, но гарантий мы не даём.)

(2 Runtime движка должен работать на большинстве 64-битных Linux-дистрибутивов при актуальных графических драйверах, см. ниже раздел о графических API.)

Q: Для каких целевых платформ можно разрабатывать игры в Defold?

A: Одним нажатием можно публиковать игры для PS4™, PS5™, Nintendo Switch, iOS (64-bit), Android (32-bit and 64-bit), HTML5, а также macOS (x86-64 and arm64), Windows (32-bit and 64-bit) и Linux (x86-64 and arm64). Это действительно одна кодовая база для нескольких поддерживаемых платформ.

Q: На какой rendering API опирается Defold?

A: Как разработчику вам нужно работать только с одним render API, используя полностью скриптуемый rendering pipeline. Render script API Defold транслирует render operations в следующие graphics APIs:

Система Графический API Примечание
macOS OpenGL 3.3 или Metal Vulkan через MoltenVK
Windows OpenGL 3.3 или Vulkan 1.1  
Linux OpenGL 3.3 или Vulkan 1.1  
Android OpenGLES 3.0 или Vulkan 1.1 Fallback на OpenGLES 2.0
iOS OpenGLES 3.0 или Metal Vulkan через MoltenVK
HTML5 WebGL 2.0 или WebGPU Fallback на WebGL 1.0

Q: Можно ли узнать, какая версия у меня запущена?

A: Да, выберите пункт “About” в меню Help. Во всплывающем окне будет ясно указана beta-версия Defold и, что ещё важнее, конкретный release SHA1. Чтобы узнать runtime-версию, используйте sys.get_engine_info().

Последнюю доступную beta-версию для скачивания с http://d.defold.com/beta можно проверить, открыв http://d.defold.com/beta/info.json (такой же файл существует и для стабильных версий: http://d.defold.com/stable/info.json).

Q: Можно ли во время выполнения узнать, на какой платформе запущена игра?

A: Да, посмотрите sys.get_sys_info().

Вопросы о редакторе

Q: Каковы системные требования редактора?

A: Редактор использует до 75% доступной памяти системы. На компьютере с 4 ГБ ОЗУ этого должно хватить для небольших проектов Defold. Для проектов среднего и большого размера рекомендуется 6 ГБ ОЗУ или больше.

Q: Обновляются ли бета-версии Defold автоматически?

A: Да. Бета-редактор Defold проверяет обновления при запуске, так же как и стабильная версия Defold.

Q: Почему при запуске редактора появляется ошибка java.awt.AWTError: Assistive Technology not found?

A: Эта ошибка связана с проблемами Java assistive technology, например NVDA screen reader. Скорее всего, у вас в домашней папке есть файл .accessibility.properties. Удалите этот файл и попробуйте снова запустить редактор. (Примечание: если вы действительно используете assistive technology и вам необходим этот файл, напишите нам на info@defold.se, чтобы обсудить альтернативные решения).

Обсуждение есть здесь, на форуме Defold.

Q: Почему при запуске редактора появляется ошибка sun.security.validator.ValidatorException: PKIX path building failed?

A: Это исключение возникает, когда редактор пытается установить https-соединение, но цепочка сертификатов, предоставленная сервером, не может быть проверена.

Подробности об этой ошибке смотрите по этой ссылке.

Q: Почему при выполнении некоторых операций я получаю java.lang.OutOfMemoryError: Java heap space?

A: Редактор Defold построен на Java, и в некоторых случаях стандартной конфигурации памяти Java может не хватать. Если это происходит, вы можете вручную настроить редактор на выделение большего объёма памяти, отредактировав файл конфигурации редактора. Файл конфигурации с именем config находится в папке Defold.app/Contents/Resources/ на macOS. На Windows он находится рядом с исполняемым файлом Defold.exe, а на Linux — рядом с исполняемым файлом Defold. Откройте файл config и добавьте -Xmx6gb в строку, начинающуюся с vmargs. Параметр -Xmx6gb установит максимальный размер heap в 6 гигабайт (по умолчанию обычно 4Gb). Это должно выглядеть примерно так:

vmargs = -Xmx6gb,-Dfile.encoding=UTF-8,-Djna.nosys=true,-Ddefold.launcherpath=${bootstrap.launcherpath},-Ddefold.resourcespath=${bootstrap.resourcespath},-Ddefold.version=${build.version},-Ddefold.editor.sha1=${build.editor_sha1},-Ddefold.engine.sha1=${build.engine_sha1},-Ddefold.buildtime=${build.time},-Ddefold.channel=${build.channel},-Ddefold.archive.domain=${build.archive_domain},-Djava.net.preferIPv4Stack=true,-Dsun.net.client.defaultConnectTimeout=30000,-Dsun.net.client.defaultReadTimeout=30000,-Djogl.texture.notexrect=true,-Dglass.accessible.force=false,--illegal-access=warn,--add-opens=java.base/java.lang=ALL-UNNAMED,--add-opens=java.desktop/sun.awt=ALL-UNNAMED,--add-opens=java.desktop/sun.java2d.opengl=ALL-UNNAMED,--add-opens=java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED

Вопросы о Linux

Q: Почему редактор Defold выглядит очень маленьким на 4k- или HiDPI-мониторе?

A: Если вы используете GNOME, можно изменить коэффициент масштабирования перед запуском Defold. источник

$ gsettings set org.gnome.desktop.interface scaling-factor 2
$ ./Defold

A: Альтернативный вариант, особенно если вам нужно масштабирование с дробным коэффициентом, — изменить файл Defold/config и добавить glass.gtk.uiScale в строку vmargs: источник

vmargs = -Dglass.gtk.uiScale=1.5,-Dfile.encoding=UTF-8,...
vmargs = -Dglass.gtk.uiScale=175%,-Dfile.encoding=UTF-8,...
vmargs = -Dglass.gtk.uiScale=192dpi,-Dfile.encoding=UTF-8,...

Подробнее об этом значении смотрите в статье Arch Linux HiDPI wiki.

A: Если вы используете KDE, можно задать GDK_SCALE:

$ GDK_SCALE=2 ./Defold

Q: Почему клики мышью в Elementary OS проходят через редактор на окно под ним?

A: Запустите редактор так:

$ GTK_CSD=0 ./Defold

Q: Редактор Defold падает при открытии collection или game object, и в сообщении об ошибке упоминается com.jogamp.opengl

A: На некоторых дистрибутивах (например, Ubuntu 18) есть проблема с версией jogamp/jogl, используемой в Defold, и версией Mesa в системе. Вы можете переопределить GL-версию, которая возвращается при вызове glGetString(GL_VERSION), установив MESA_GL_VERSION_OVERRIDE в 2.1 или в большее значение, но не выше версии вашего драйвера. Проверить максимальную поддерживаемую версию OpenGL драйвера можно через glxinfo:

glxinfo | grep version

Пример вывода (ищите “OpenGL version string: x.y”):

server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
Max core profile version: 4.6
Max compat profile version: 4.6
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.2
OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.2.6
OpenGL core profile shading language version string: 4.60
OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.2.6
OpenGL shading language version string: 4.60
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.2.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
GL_EXT_shader_implicit_conversions, GL_EXT_shader_integer_mix,

Используйте версию 2.1 или версию, совпадающую с версией вашего графического драйвера:

$ MESA_GL_VERSION_OVERRIDE=2.1 ./Defold
$ MESA_GL_VERSION_OVERRIDE=4.6 ./Defold

Q: Почему при запуске Defold я получаю “com.jogamp.opengl.GLException: Graphics configuration failed”?

A: На некоторых дистрибутивах (например, Ubuntu 20.04) есть проблема с новыми драйверами Mesa (Iris) при запуске Defold. Можно попробовать использовать более старую версию драйвера при запуске Defold:

$ MESA_LOADER_DRIVER_OVERRIDE=i965 ./Defold

Q: Редактор Defold падает при открытии collection или game object, и в сообщении об ошибке упоминается libffi.so

A: Версия libffi в вашем дистрибутиве не совпадает с той, которая нужна Defold (версия 6 или 7). Убедитесь, что libffi.so.6 или libffi.so.7 установлены в /usr/lib/x86_64-linux-gnu. Скачать libffi.so.7 можно так:

$ wget http://ftp.br.debian.org/debian/pool/main/libf/libffi/libffi7_3.3-6_amd64.deb
$ sudo dpkg -i libffi7_3.3-6_amd64.deb

Затем укажите путь к этой версии в переменной окружения LD_PRELOAD при запуске Defold:

$ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libffi.so.7 ./Defold

Q: Мои OpenGL-драйверы устарели. Могу ли я всё ещё использовать Defold?

A: Да, возможно, вы сможете использовать Defold, если включите software rendering. Это делается через установку переменной окружения LIBGL_ALWAYS_SOFTWARE в значение 1:

$ LIBGL_ALWAYS_SOFTWARE=1 ./Defold

Q: Почему моя игра Defold не запускается, когда я пытаюсь запустить её на Linux?

A: Проверьте вывод консоли в редакторе. Если вы видите следующее сообщение:

dmengine: error while loading shared libraries: libopenal.so.1: cannot open shared object file: No such file or directory

Тогда вам нужно установить libopenal1. Название пакета зависит от дистрибутива, и в некоторых случаях может потребоваться установить пакеты openal и openal-dev или openal-devel.

$ apt-get install libopenal-dev

Q: Почему верхнее меню закрывается раньше, чем я успеваю что-то выбрать?

A: Скорее всего, это вызвано используемым оконным менеджером (например, Qtile или i3). Это известная проблема в JavaFX, и её можно решить либо установкой переменной окружения GDK_DISPLAY в 1:¨

$ GDK_DISPLAY=1 ./Defold

D=2

Либо изменив файл Defold/config и добавив -Djdk.gtk.version=2 в строку vmargs:

vmargs = -Djdk.gtk.version=2,-Dfile.encoding=UTF-8,...

Q: Почему я не могу просматривать все доступные пути при выборе Open From Disk?

A: Если вы запускаете Defold из Steam через Flatpak, нужно выдать Steam разрешение на доступ к другим дискам. Изменить разрешения приложений Flatpak можно через Flatseal или аналогичный инструмент.

Q: Почему я не могу открыть web profiler или любой другой пункт меню, для которого нужен браузер?

A: Скорее всего, внутренний вызов Desktop.getDesktop().browse(new URI(url)); завершается ошибкой, потому что в не-Gnome-системах браузер не обнаруживается. Попробуйте установить libgnome.

$ apt-get install libgnome

Вопросы об Android

Q: Можно ли скрыть панели навигации и статуса на Android?

A: Да, установите параметр immersive_mode в разделе Android вашего файла game.project. Это позволит приложению использовать весь экран и получать все касания по экрану.

Q: Почему при установке игры Defold на устройство я получаю ошибку “Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]”?

A: Android обнаружил, что вы пытаетесь установить приложение с новым сертификатом. При сборке debug-версий каждая сборка подписывается временным сертификатом. Удалите старую версию приложения перед установкой новой:

$ adb uninstall com.defold.examples
Success
$ adb install Defold\ examples.apk
4826 KB/s (18774344 bytes in 3.798s)
      pkg: /data/local/tmp/Defold examples.apk
Success

Q: Почему при сборке с некоторыми расширениями появляются ошибки о конфликтующих свойствах в AndroidManifest.xml?

A: Это может произойти, когда два или более расширения предоставляют заглушку Android Manifest с одним и тем же тегом свойства, но с разными значениями. Например, такое случалось с Firebase и AdMob. Ошибка сборки выглядит примерно так:

SEVERE: /tmp/job4531953598647135356/upload/AndroidManifest.xml:32:13-58
Error: Attribute property#android.adservices.AD_SERVICES_CONFIG@resource
value=(@xml/ga_ad_services_config) from AndroidManifest.xml:32:13-58 is also
present at AndroidManifest.xml:92:13-59 value=(@xml/gma_ad_services_config).
Suggestion: add 'tools:replace="android:resource"' to <property> element at
AndroidManifest.xml to override. 

Подробнее об этой проблеме и обходном решении можно прочитать в issue Defold #9453 и issue Google #327696048.

Вопросы об HTML5

Q: Почему моё HTML5-приложение зависает на splash screen в Chrome?

A: В некоторых случаях невозможно запустить игру в браузере локально прямо из файловой системы. При запуске из редактора игра раздаётся через локальный web server. Например, можно использовать SimpleHTTPServer в Python:

$ python -m SimpleHTTPServer [port]

Q: Почему моя игра падает с ошибкой “Unexpected data size” во время загрузки?

A: Обычно это происходит, если вы используете Windows, делаете сборку и коммитите её в Git. Если в Git неправильно настроены окончания строк, он изменит line endings и, как следствие, размер данных. Чтобы решить проблему, следуйте этим инструкциям: https://docs.github.com/en/free-pro-team@latest/github/using-git/configuring-git-to-handle-line-endings

Вопросы об IOS

Q: Я не могу установить свою игру Defold, используя бесплатную учётную запись Apple Developer.

A: Убедитесь, что в вашем проекте Defold используется тот же bundle identifier, что и в проекте Xcode, когда вы генерировали mobile provisioning profile.

Q: Как проверить entitlements у собранного приложения?

A: Из Inspect the entitlements of a built app:

codesign -d --ent :- /path/to/the.app

Q: Как проверить entitlements у provisioning profile

A: Из Inspecting a profile’s entitlements:

security cms -D -i /path/to/iOSTeamProfile.mobileprovision

Вопросы о Windows

Q: Почему GUI box nodes без текстуры прозрачны в редакторе, но отображаются как ожидается после сборки и запуска?

A: Эта ошибка может возникать на компьютерах с GPU AMD Radeon. Убедитесь, что у вас обновлены графические драйверы.

Q: Почему при открытии атласа или scene view я получаю com.sun.jna.Native.open.class java.lang.Error: Access is denied?

A: Попробуйте запустить Defold от имени администратора. Щёлкните правой кнопкой мыши по исполняемому файлу Defold и выберите “Run as Administrator”.

Q: Почему моя игра неправильно рендерится на Windows с интегрированным GPU Intel UHD, хотя HTML5-сборка работает?

A: Убедитесь, что у вас установлена версия драйвера не ниже 27.20.100.8280. Проверьте это через Intel Driver Support Assistant. Дополнительную информацию можно найти в этом сообщении на форуме.

Q: Редактор Defold падает, и в логе показано AWTError: Assistive Technology not found

Если редактор падает, а в логе есть строка Caused by: java.awt.AWTError: Assistive Technology not found: com.sun.java.accessibility.AccessBridge, выполните следующие шаги:

  • Перейдите в C:\Users\<username>
  • Откройте файл .accessibility.properties обычным текстовым редактором (подойдёт Notepad)
  • Найдите в конфиге следующие строки:
assistive_technologies=com.sun.java.accessibility.AccessBridge
screen_magnifier_present=true
  • Добавьте символ решётки (#`) перед этими строками
  • Сохраните изменения в файле и перезапустите Defold

Вопросы о консолях

Q: Нужно ли устанавливать дополнительные инструменты для сборки под консоли?

A: Вы сможете создавать application bundles из редактора и из инструментов командной строки. Информация о том, как тестировать на оборудовании PlayStation®4, PlayStation®5 и Nintendo Switch, будет предоставлена вам после получения доступа к соответствующим платформам.

Q: Останется ли по-прежнему просто использовать одну кодовую базу, если я также решу выпускаться на консолях?

A: Да, все стандартные функции Defold API доступны и на консольных платформах. Помимо стандартной функциональности у вас будет доступ к нескольким функциям, специфичным для PlayStation®4, PlayStation®5 и Nintendo Switch, но в целом код должен оставаться одинаковым на разных платформах.

Публикация игр

Q: Я пытаюсь опубликовать игру в AppStore. Как мне отвечать на вопрос об IDFA?

A: При отправке Apple показывает три чекбокса для трёх допустимых сценариев использования IDFA:

  1. Показ рекламы внутри приложения
  2. Атрибуция установок из рекламы
  3. Атрибуция действий пользователя из рекламы

Если вы отметите вариант 1, ревьюер приложения будет ожидать, что в приложении действительно есть реклама. Если в вашей игре рекламы нет, её могут отклонить. Сам Defold не использует AD id.

Q: Как монетизировать мою игру?

A: В Defold есть поддержка внутриигровых покупок и различных рекламных решений. Посмотрите категорию Monetization в Asset Portal — там можно найти актуальный список доступных вариантов монетизации.

Ошибки при использовании Defold

Q: Я не могу запустить игру, и при этом нет ошибки сборки. В чём проблема?

A: В редких случаях процесс сборки может не пересобрать файлы после того, как ранее уже сталкивался с ошибками сборки, которые вы исправили. Принудительно выполните полную пересборку через Project > Rebuild And Launch в меню.

Игровой контент

Q: Поддерживает ли Defold prefabs?

A: Да. В Defold они называются collections. Они позволяют создавать сложные иерархии game objects и сохранять их как отдельные building blocks, которые затем можно инстанцировать в редакторе или во время выполнения (через collection spawning). Для GUI nodes также есть поддержка GUI templates.

Q: Почему я не могу добавить game object как дочерний объект к другому game object?

A: Скорее всего, вы пытаетесь добавить дочерний объект прямо в файле game object, а это невозможно. Это можно сделать только в файле collection. Чтобы понять почему, нужно помнить, что иерархии parent-child — это строго иерархии преобразований scene-graph. Game object, который ещё не размещён (или не заспаунен) в сцене (collection), не является частью scene-graph и, следовательно, не может быть частью иерархии scene-graph. Id родителя game object можно получить с помощью go.get_parent().

Q: Почему я не могу рассылать сообщения всем дочерним объектам game object?

A: Отношения parent-child выражают только связи преобразований в scene-graph и не должны восприниматься как агрегаты объектной ориентации. Если вы сосредоточитесь на данных игры и на том, как лучше их преобразовывать при смене состояния игры, необходимость всё время рассылать сообщения с данными состояния многим объектам, скорее всего, уменьшится. В тех случаях, когда иерархии данных всё же нужны, их легко построить и обрабатывать в Lua.

Q: Почему у моих спрайтов появляются визуальные артефакты по краям?

A: Это визуальный артефакт под названием “edge bleeding”, когда крайние пиксели соседних изображений в атласе попадают в изображение, назначенное вашему спрайту. Решение — дополнить края изображений атласа дополнительными строками и столбцами одинаковых пикселей. К счастью, редактор атласов в Defold умеет делать это автоматически. Откройте атлас и установите значение Extrude Borders в 1.

Q: Могу ли я тонировать спрайты или делать их прозрачными, или для этого нужно писать собственный shader?

A: Во встроенном shader для спрайтов, который по умолчанию используется для всех спрайтов, определена константа “tint”:

  local red = 1
  local green = 0.3
  local blue = 0.55
  local alpha = 1
  go.set("#sprite", "tint", vmath.vector4(red, green, blue, alpha))

Q: Если я выставлю координату z у спрайта в 100, он не будет рендериться. Почему?

A: Положение game object по Z управляет порядком рендеринга. Объекты с меньшими значениями рисуются раньше объектов с большими значениями. В стандартном render script рисуются game objects с глубиной от -1 до 1, всё, что ниже или выше, рисоваться не будет. Подробнее о render script можно прочитать в официальной документации по Render. Для GUI nodes значение Z игнорируется и не влияет на порядок рендеринга вообще. Вместо этого узлы рисуются в том порядке, в котором перечислены, и в соответствии с дочерними иерархиями (и слоями). Подробнее о рендеринге GUI и оптимизации draw calls с помощью слоёв читайте в официальной документации по GUI.

Q: Повлияет ли на производительность изменение диапазона Z в view projection с -100..100?

A: Нет. Единственный эффект — точность. z-buffer является логарифмическим и имеет очень высокую точность для значений Z, близких к 0, и меньшую точность для значений, удалённых от 0. Например, при 24-битном буфере можно различить значения 10.0 и 10.000005, тогда как 10000 и 10005 — уже нет.

Q: Почему в представлении углов нет единообразия?

A: На самом деле единообразие есть. В редакторе и игровых API углы везде выражаются в градусах. В математических библиотеках используются радианы. Сейчас исключением является физическое свойство angular_velocity, которое пока задаётся в радианах/с. Ожидается, что это изменится.

Q: Как будет рендериться GUI box-node, если у него задан только цвет, без текстуры?

A: Это просто фигура с цветом вершин. Имейте в виду, что она всё равно будет расходовать fill-rate.

Q: Если я меняю assets на лету, будет ли движок автоматически выгружать их?

A: Все ресурсы внутри движка учитываются через ref-count. Как только ref-count становится равным нулю, ресурс освобождается.

Q: Можно ли проигрывать audio без audio component, прикреплённого к game object?

A: Всё в движке основано на компонентах. Можно создать “headless” game object с несколькими sounds и проигрывать звуки, отправляя сообщения объекту sound-controller.

Q: Можно ли во время выполнения изменить audio file, связанный с audio component?

A: В общем случае все ресурсы объявляются статически, и это удобно тем, что управление ресурсами вы получаете бесплатно. Вы можете использовать resource properties, чтобы менять ресурс, назначенный компоненту.

Q: Есть ли способ получить доступ к свойствам physics collision shape?

A: Да, посмотрите physics API, особенно physics.get_shape() и physics.set_shape().

Q: Есть ли быстрый способ отрисовать collision objects в сцене? (как debug draw в Box2D)

A: Да, установите флаг physics.debug в game.project. (См. официальную документацию по настройкам проекта)

Q: Каковы затраты производительности при большом количестве contacts/collisions?

A: Внутри Defold работает модифицированная версия Box2D, и стоимость по производительности должна быть примерно такой же. Вы всегда можете посмотреть, сколько времени движок тратит на физику, открыв profiler. Также стоит учитывать, какие collision objects вы используете. Например, статические объекты дешевле с точки зрения производительности. Подробнее смотрите в официальной документации по Physics в Defold.

Q: Какое влияние на производительность оказывает большое количество компонентов particle effect?

A: Это зависит от того, проигрываются они или нет. ParticleFx, который не проигрывается, не имеет стоимости по производительности. Влияние проигрываемого ParticleFx следует оценивать через profiler, поскольку всё зависит от его конфигурации. Как и во многих других случаях, память заранее выделяется под количество ParticleFx, заданное как max_count в game.project.

Q: Как получать input для game object внутри collection, загруженной через collection proxy?

A: У каждой collection, загруженной через proxy, есть собственный input stack. Input передаётся из input stack основной collection через proxy component объектам внутри загруженной collection. Это означает, что недостаточно просто получить input focus для game object внутри загруженной collection — input focus должен получить и game object, который содержит proxy component. Подробнее см. в документации по Input.

Q: Можно ли использовать script properties строкового типа?

A: Нет. Defold поддерживает свойства типа hash. Их можно использовать для обозначения типов, идентификаторов состояний или любых других ключей. Hashes также можно использовать для хранения id game object’ов (путей), хотя свойства url часто предпочтительнее, поскольку редактор автоматически заполняет выпадающий список подходящими URL. Подробнее см. в документации по Script properties.

Q: Как получить доступ к отдельным ячейкам матрицы (созданной через vmath.matrix4() или аналогично)?

A: Доступ к ячейкам выполняется через mymatrix.m11, mymatrix.m12, mymatrix.m21 и т.д.

Q: Я получаю Not enough resources to clone the node при использовании gui.clone() или gui.clone_tree()

A: Увеличьте значение Max Nodes у gui component. Это значение можно найти в панели Properties, если выбрать корень компонента в Outline.

Форум

Q: Можно ли создать тему, в которой я рекламирую свою работу?

A: Конечно! Для этого у нас есть специальная категория “Work for hire”. Мы всегда поддерживаем всё, что полезно сообществу, и предложение своих услуг сообществу — за оплату или без неё — хороший пример такого вклада.

Q: Я создал тему и добавил свою работу. Могу ли я добавлять ещё?

A: Чтобы уменьшить “поднимание” тем в категории “Work for hire”, вы не можете писать в своей теме чаще чем раз в 14 дней (если только это не прямой ответ на комментарий в теме — в таком случае отвечать можно). Если вы хотите добавить новые работы в течение этого 14-дневного периода, нужно отредактировать существующие сообщения и добавить новый контент туда.

Q: Можно ли использовать категорию Work for Hire для размещения вакансий?

A: Конечно, почему нет! Её можно использовать и для предложений, и для запросов, например: “Ищу 2D pixel artist; я богат и хорошо заплачу”.