A: Да, движок и редактор Defold с полной функциональностью полностью бесплатны. Никаких скрытых расходов, платежей или роялти. Просто бесплатно.
A: Одна из целей Defold Foundation — сделать так, чтобы программное обеспечение Defold было доступно разработчикам по всему миру, а исходный код был доступен бесплатно.
A: Мы серьёзно привержены развитию Defold. Defold Foundation создана таким образом, чтобы ещё много лет существовать как ответственный владелец Defold. Она никуда не исчезнет.
A: Безусловно. Defold используют всё больше профессиональных разработчиков игр и игровых студий. Посмотрите витрину игр и примеры игр, созданных с помощью Defold.
A: Мы собираем анонимные данные об использовании наших сайтов и редактора Defold, чтобы улучшать сервисы и продукт. В играх, которые вы создаёте, пользовательский трекинг отсутствует, если только вы сами не добавите аналитический сервис. Подробнее об этом можно прочитать в нашей Privacy Policy.
A: Defold создали Ragnar Svensson и Christian Murray. Они начали работать над движком, редактором и серверами в 2009 году. В 2013 году началось партнёрство King и Defold, а в 2014 году King приобрела Defold. Полную историю можно прочитать здесь.
A: Конечно! Движок является полноценным 3D-движком. Однако набор инструментов ориентирован на 2D, поэтому многое придётся делать вручную. Улучшенная поддержка 3D запланирована.
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.
A: Поддержка C++ в Defold в основном предназначена для написания нативных расширений, которые работают с SDK сторонних разработчиков или платформенными API. dmSDK (C++ API Defold, используемый в нативных расширениях) будет постепенно расширяться, чтобы можно было при желании писать всю игровую логику на C++. Lua всё равно останется основным языком игровой логики, но с расширением C++ API появится и возможность писать игровую логику на C++. Работа по расширению C++ API в основном заключается в переносе существующих приватных заголовочных файлов в публичную часть и в доработке API для публичного использования.
A: Официальной поддержки TypeScript нет. Сообщество поддерживает toolkit ts-defold для написания TypeScript и его транспиляции в Lua прямо из VSCode.
A: Официальной поддержки Haxe нет. Сообщество поддерживает hxdefold для написания Haxe и его транспиляции в Lua.
A: Defold Foundation добавила поддержку C# и сделала её доступной как библиотечную зависимость. C# — широко используемый язык программирования, и он поможет студиям и разработчикам, которые сильно завязаны на C#, перейти на Defold.
Defold НЕ отказывается от Lua как основного языка скриптинга. Поддержка C# добавлена как новый язык для расширений. На сам движок это не повлияет, если только вы сами не решите использовать C#-расширения в проекте.
Поддержка C# будет иметь цену (размер исполняемого файла, производительность во время выполнения и т.д.), но это уже решение конкретного разработчика или студии.
Что касается самого C#, это относительно небольшое изменение, поскольку система расширений уже поддерживает много языков (C/C++/Java/Objective-C/Zig). SDK будут синхронизироваться за счёт генерации C#-bindings. Это позволит поддерживать bindings в актуальном состоянии с минимальными усилиями.
Ранее Defold Foundation была против добавления поддержки C# в 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.)
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). Это действительно одна кодовая база для нескольких поддерживаемых платформ.
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 |
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).
A: Да, посмотрите sys.get_sys_info().
A: Редактор использует до 75% доступной памяти системы. На компьютере с 4 ГБ ОЗУ этого должно хватить для небольших проектов Defold. Для проектов среднего и большого размера рекомендуется 6 ГБ ОЗУ или больше.
A: Да. Бета-редактор Defold проверяет обновления при запуске, так же как и стабильная версия Defold.
java.awt.AWTError: Assistive Technology not found?
A: Эта ошибка связана с проблемами Java assistive technology, например NVDA screen reader. Скорее всего, у вас в домашней папке есть файл .accessibility.properties. Удалите этот файл и попробуйте снова запустить редактор. (Примечание: если вы действительно используете assistive technology и вам необходим этот файл, напишите нам на info@defold.se, чтобы обсудить альтернативные решения).
Обсуждение есть здесь, на форуме Defold.
sun.security.validator.ValidatorException: PKIX path building failed?
A: Это исключение возникает, когда редактор пытается установить https-соединение, но цепочка сертификатов, предоставленная сервером, не может быть проверена.
Подробности об этой ошибке смотрите по этой ссылке.
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
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
A: Запустите редактор так:
$ GTK_CSD=0 ./Defold
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
com.jogamp.opengl.GLException: Graphics configuration failed”?
A: На некоторых дистрибутивах (например, Ubuntu 20.04) есть проблема с новыми драйверами Mesa (Iris) при запуске Defold. Можно попробовать использовать более старую версию драйвера при запуске Defold:
$ MESA_LOADER_DRIVER_OVERRIDE=i965 ./Defold
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
A: Да, возможно, вы сможете использовать Defold, если включите software rendering. Это делается через установку переменной окружения LIBGL_ALWAYS_SOFTWARE в значение 1:
$ LIBGL_ALWAYS_SOFTWARE=1 ./Defold
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
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,...
A: Если вы запускаете Defold из Steam через Flatpak, нужно выдать Steam разрешение на доступ к другим дискам. Изменить разрешения приложений Flatpak можно через Flatseal или аналогичный инструмент.
A: Скорее всего, внутренний вызов Desktop.getDesktop().browse(new URI(url)); завершается ошибкой, потому что в не-Gnome-системах браузер не обнаруживается. Попробуйте установить libgnome.
$ apt-get install libgnome
A: Да, установите параметр immersive_mode в разделе Android вашего файла game.project. Это позволит приложению использовать весь экран и получать все касания по экрану.
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
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.
A: В некоторых случаях невозможно запустить игру в браузере локально прямо из файловой системы. При запуске из редактора игра раздаётся через локальный web server. Например, можно использовать SimpleHTTPServer в Python:
$ python -m SimpleHTTPServer [port]
A: Обычно это происходит, если вы используете Windows, делаете сборку и коммитите её в Git. Если в Git неправильно настроены окончания строк, он изменит line endings и, как следствие, размер данных. Чтобы решить проблему, следуйте этим инструкциям: https://docs.github.com/en/free-pro-team@latest/github/using-git/configuring-git-to-handle-line-endings
A: Убедитесь, что в вашем проекте Defold используется тот же bundle identifier, что и в проекте Xcode, когда вы генерировали mobile provisioning profile.
A: Из Inspect the entitlements of a built app:
codesign -d --ent :- /path/to/the.app
A: Из Inspecting a profile’s entitlements:
security cms -D -i /path/to/iOSTeamProfile.mobileprovision
A: Эта ошибка может возникать на компьютерах с GPU AMD Radeon. Убедитесь, что у вас обновлены графические драйверы.
com.sun.jna.Native.open.class java.lang.Error: Access is denied?
A: Попробуйте запустить Defold от имени администратора. Щёлкните правой кнопкой мыши по исполняемому файлу Defold и выберите “Run as Administrator”.
A: Убедитесь, что у вас установлена версия драйвера не ниже 27.20.100.8280. Проверьте это через Intel Driver Support Assistant. Дополнительную информацию можно найти в этом сообщении на форуме.
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
#`) перед этими строкамиA: Вы сможете создавать application bundles из редактора и из инструментов командной строки. Информация о том, как тестировать на оборудовании PlayStation®4, PlayStation®5 и Nintendo Switch, будет предоставлена вам после получения доступа к соответствующим платформам.
A: Да, все стандартные функции Defold API доступны и на консольных платформах. Помимо стандартной функциональности у вас будет доступ к нескольким функциям, специфичным для PlayStation®4, PlayStation®5 и Nintendo Switch, но в целом код должен оставаться одинаковым на разных платформах.
A: При отправке Apple показывает три чекбокса для трёх допустимых сценариев использования IDFA:
Если вы отметите вариант 1, ревьюер приложения будет ожидать, что в приложении действительно есть реклама. Если в вашей игре рекламы нет, её могут отклонить. Сам Defold не использует AD id.
A: В Defold есть поддержка внутриигровых покупок и различных рекламных решений. Посмотрите категорию Monetization в Asset Portal — там можно найти актуальный список доступных вариантов монетизации.
A: В редких случаях процесс сборки может не пересобрать файлы после того, как ранее уже сталкивался с ошибками сборки, которые вы исправили. Принудительно выполните полную пересборку через Project > Rebuild And Launch в меню.
A: Да. В Defold они называются collections. Они позволяют создавать сложные иерархии game objects и сохранять их как отдельные building blocks, которые затем можно инстанцировать в редакторе или во время выполнения (через collection spawning). Для GUI nodes также есть поддержка GUI templates.
A: Скорее всего, вы пытаетесь добавить дочерний объект прямо в файле game object, а это невозможно. Это можно сделать только в файле collection. Чтобы понять почему, нужно помнить, что иерархии parent-child — это строго иерархии преобразований scene-graph. Game object, который ещё не размещён (или не заспаунен) в сцене (collection), не является частью scene-graph и, следовательно, не может быть частью иерархии scene-graph. Id родителя game object можно получить с помощью go.get_parent().
A: Отношения parent-child выражают только связи преобразований в scene-graph и не должны восприниматься как агрегаты объектной ориентации. Если вы сосредоточитесь на данных игры и на том, как лучше их преобразовывать при смене состояния игры, необходимость всё время рассылать сообщения с данными состояния многим объектам, скорее всего, уменьшится. В тех случаях, когда иерархии данных всё же нужны, их легко построить и обрабатывать в Lua.
A: Это визуальный артефакт под названием “edge bleeding”, когда крайние пиксели соседних изображений в атласе попадают в изображение, назначенное вашему спрайту. Решение — дополнить края изображений атласа дополнительными строками и столбцами одинаковых пикселей. К счастью, редактор атласов в Defold умеет делать это автоматически. Откройте атлас и установите значение Extrude Borders в 1.
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))
A: Положение game object по Z управляет порядком рендеринга. Объекты с меньшими значениями рисуются раньше объектов с большими значениями. В стандартном render script рисуются game objects с глубиной от -1 до 1, всё, что ниже или выше, рисоваться не будет. Подробнее о render script можно прочитать в официальной документации по Render. Для GUI nodes значение Z игнорируется и не влияет на порядок рендеринга вообще. Вместо этого узлы рисуются в том порядке, в котором перечислены, и в соответствии с дочерними иерархиями (и слоями). Подробнее о рендеринге GUI и оптимизации draw calls с помощью слоёв читайте в официальной документации по GUI.
A: Нет. Единственный эффект — точность. z-buffer является логарифмическим и имеет очень высокую точность для значений Z, близких к 0, и меньшую точность для значений, удалённых от 0. Например, при 24-битном буфере можно различить значения 10.0 и 10.000005, тогда как 10000 и 10005 — уже нет.
A: На самом деле единообразие есть. В редакторе и игровых API углы везде выражаются в градусах. В математических библиотеках используются радианы. Сейчас исключением является физическое свойство angular_velocity, которое пока задаётся в радианах/с. Ожидается, что это изменится.
A: Это просто фигура с цветом вершин. Имейте в виду, что она всё равно будет расходовать fill-rate.
A: Все ресурсы внутри движка учитываются через ref-count. Как только ref-count становится равным нулю, ресурс освобождается.
A: Всё в движке основано на компонентах. Можно создать “headless” game object с несколькими sounds и проигрывать звуки, отправляя сообщения объекту sound-controller.
A: В общем случае все ресурсы объявляются статически, и это удобно тем, что управление ресурсами вы получаете бесплатно. Вы можете использовать resource properties, чтобы менять ресурс, назначенный компоненту.
A: Да, посмотрите physics API, особенно physics.get_shape() и physics.set_shape().
A: Да, установите флаг physics.debug в game.project. (См. официальную документацию по настройкам проекта)
A: Внутри Defold работает модифицированная версия Box2D, и стоимость по производительности должна быть примерно такой же. Вы всегда можете посмотреть, сколько времени движок тратит на физику, открыв profiler. Также стоит учитывать, какие collision objects вы используете. Например, статические объекты дешевле с точки зрения производительности. Подробнее смотрите в официальной документации по Physics в Defold.
A: Это зависит от того, проигрываются они или нет. ParticleFx, который не проигрывается, не имеет стоимости по производительности. Влияние проигрываемого ParticleFx следует оценивать через profiler, поскольку всё зависит от его конфигурации. Как и во многих других случаях, память заранее выделяется под количество ParticleFx, заданное как max_count в game.project.
A: У каждой collection, загруженной через proxy, есть собственный input stack. Input передаётся из input stack основной collection через proxy component объектам внутри загруженной collection. Это означает, что недостаточно просто получить input focus для game object внутри загруженной collection — input focus должен получить и game object, который содержит proxy component. Подробнее см. в документации по Input.
A: Нет. Defold поддерживает свойства типа hash. Их можно использовать для обозначения типов, идентификаторов состояний или любых других ключей. Hashes также можно использовать для хранения id game object’ов (путей), хотя свойства url часто предпочтительнее, поскольку редактор автоматически заполняет выпадающий список подходящими URL. Подробнее см. в документации по Script properties.
vmath.matrix4() или аналогично)?
A: Доступ к ячейкам выполняется через mymatrix.m11, mymatrix.m12, mymatrix.m21 и т.д.
Not enough resources to clone the node при использовании gui.clone() или gui.clone_tree()
A: Увеличьте значение Max Nodes у gui component. Это значение можно найти в панели Properties, если выбрать корень компонента в Outline.
A: Конечно! Для этого у нас есть специальная категория “Work for hire”. Мы всегда поддерживаем всё, что полезно сообществу, и предложение своих услуг сообществу — за оплату или без неё — хороший пример такого вклада.
A: Чтобы уменьшить “поднимание” тем в категории “Work for hire”, вы не можете писать в своей теме чаще чем раз в 14 дней (если только это не прямой ответ на комментарий в теме — в таком случае отвечать можно). Если вы хотите добавить новые работы в течение этого 14-дневного периода, нужно отредактировать существующие сообщения и добавить новый контент туда.
A: Конечно, почему нет! Её можно использовать и для предложений, и для запросов, например: “Ищу 2D pixel artist; я богат и хорошо заплачу”.