FAQ
FAQ

Read this FAQ in English

Поширені запитання

Загальні запитання

Запитання: Чи справді Defold безкоштовний?

Відповідь: Так, рушій і редактор Defold з усіма можливостями цілком безкоштовні. Жодних прихованих витрат, платежів або роялті. Просто безкоштовно.

Запитання: Навіщо Defold Foundation надає Defold безкоштовно?

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

Запитання: Як довго ви підтримуватимете Defold?

Відповідь: Ми віддані розвитку Defold. Defold Foundation створено так, щоб гарантовано залишатися відповідальним власником Defold ще багато років. Організація нікуди не зникне.

Запитання: Чи можна покладатися на Defold у професійній розробці?

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

Запитання: Як ви відстежуєте користувачів?

Відповідь: Ми збираємо анонімні дані про використання наших вебсайтів і редактора Defold, щоб покращувати сервіси та продукт. В іграх, які ви створюєте, користувачів не відстежують (якщо ви самі не додасте сервіс аналітики). Докладніше про це читайте в нашій політиці конфіденційності.

Запитання: Хто створив Defold?

Відповідь: Defold створили Ragnar Svensson і Christian Murray. Вони почали працювати над рушієм, редактором і серверами у 2009 році. Партнерство King і Defold розпочалося у 2013 році, а у 2014 році King придбала Defold. Повну історію читайте тут.

Запитання про розробку ігор

Запитання: Чи можна створювати 3D-ігри в Defold?

Відповідь: Звісно! Це повноцінний 3D-рушій. Однак набір інструментів орієнтований на 2D, тому багато складної роботи доведеться виконувати самостійно. Заплановано покращити підтримку 3D.

Запитання про мови програмування

Запитання: Якою мовою програмування я працюватиму в Defold?

Відповідь: Ігрову логіку в проєкті Defold переважно пишуть мовою Lua (а саме Lua 5.1/LuaJIT, докладніше див. у посібнику з Lua). Lua — легка динамічна мова, швидка й дуже потужна. Defold підтримує транспілятори, які генерують код Lua. Установивши розширення транспілятора, ви можете використовувати альтернативні мови, як-от Teal, щоб писати код Lua зі статичною перевіркою. Також можна використовувати нативний код (C/C++, Objective-C, Java та JavaScript залежно від платформи), щоб розширювати рушій Defold новими можливостями. Під час створення власних матеріалів для написання вершинних і фрагментних шейдерів використовують мову шейдерів OpenGL ES SL.

Запитання: Чи можна писати ігрову логіку на C++?

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

Запитання: Чи можна використовувати TypeScript із Defold?

Відповідь: TypeScript офіційно не підтримується. Спільнота підтримує набір інструментів ts-defold, за допомогою якого можна писати код TypeScript і транспілювати його в Lua безпосередньо у VSCode.

Запитання: Чи можна використовувати Haxe із Defold?

Відповідь: Haxe офіційно не підтримується. Спільнота підтримує hxdefold для написання коду Haxe та його транспіляції в Lua.

Запитання: Чи можна використовувати C# із Defold?

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

Запитання: Мене непокоїть, що додавання підтримки C# негативно вплине на Defold. Чи варто хвилюватися?

Defold НЕ відмовляється від Lua як основної мови скриптів. C# додано як нову мову для розширень. Це не вплине на рушій, якщо ви не вирішите використовувати розширення C# у своєму проєкті.

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

Що стосується самого C#, це порівняно невелика зміна, адже система розширень уже підтримує багато мов (C/C++/Java/Objective-C/Zig). SDK узгоджуватимуться завдяки генеруванню прив’язок C#. Це дасть змогу підтримувати їх актуальними з мінімальними зусиллями.

Раніше Defold Foundation виступала проти додавання підтримки C# у Defold, але змінила думку з кількох причин:

  • Студії та розробники й далі просять додати підтримку C#.
  • Підтримку C# обмежено лише розширеннями (тобто вона потребує небагато зусиль).
  • Це не вплине на ядро рушія.
  • Згенеровані API C# можна підтримувати узгодженими з мінімальними зусиллями.
  • Підтримка C# ґрунтуватиметься на DotNet 9 із NativeAOT, що генерує статичні бібліотеки, які наявний конвеєр збирання може підключати під час компонування (як і будь-яке інше розширення Defold).

Запитання про платформи

Запитання: На яких платформах працює Defold?

Відповідь: Редактор, інструменти та середовище виконання рушія підтримують такі платформи:

Система Версія Архітектури Підтримка
macOS 11 Big Sur x86-64, arm-64 Редактор і рушій
Windows Vista x86-32, x86-64 Редактор і рушій
Ubuntu (1) 22.04 LTS x86-64 Редактор
Linux (2) Будь-яка x86-64, arm-64 Рушій
iOS 15.0 arm-64 x86_64 Рушій
Android 5.0 (рівень API 21) arm-32, arm-64 Рушій
HTML5   wasm-web, wasm_pthread-web Рушій

(1 Редактор збирають і тестують для 64-бітної Ubuntu. Він має працювати й на інших дистрибутивах, але ми не даємо гарантій.)

(2 Середовище виконання рушія має працювати на більшості 64-бітних дистрибутивів Linux, якщо графічні драйвери оновлені. Докладніше про графічні API див. нижче.)

Запитання: Для яких цільових платформ можна розробляти ігри за допомогою Defold?

Відповідь: Одним клацанням можна опублікувати гру для PS4™, PS5™, Nintendo Switch, iOS (64-бітної), Android (32-бітної та 64-бітної) і HTML5, а також macOS (x86-64 та arm64), Windows (32-бітної та 64-бітної) і Linux (x86-64 та arm64). Це справді єдина кодова база з підтримкою багатьох платформ.

Запитання: Який API рендерингу використовує Defold?

Відповідь: Розробнику достатньо працювати з єдиним API рендерингу через повністю керований скриптами конвеєр рендерингу. API скриптів рендерингу Defold перетворює операції рендерингу на виклики таких графічних API:

Система Графічний API Примітка
macOS OpenGL 3.3 або Metal Vulkan через MoltenVK
Windows OpenGL 3.3 або Vulkan 1.1  
Linux x86-64 OpenGL 3.3 або Vulkan 1.1  
Linux ARM64 OpenGL ES або Vulkan 1.1 Типово використовується EGL/GLES
Android OpenGLES 3.0 або Vulkan 1.1 Резервний варіант — OpenGLES 2.0
iOS OpenGLES 3.0 або Metal Vulkan через MoltenVK
HTML5 WebGL 2.0 або WebGPU Резервний варіант — WebGL 1.0

Запитання: Чи можна дізнатися, яку версію я використовую?

Відповідь: Так, виберіть пункт «About» у меню Help. У спливному вікні чітко вказано бета-версію Defold і, що важливіше, SHA1 конкретного випуску. Щоб визначити версію під час виконання, використовуйте sys.get_engine_info().

Номер найновішої бета-версії, доступної для завантаження з http://d.defold.com/beta, можна перевірити, відкривши http://d.defold.com/beta/info.json (такий самий файл є й для стабільних версій: http://d.defold.com/stable/info.json).

Запитання: Чи можна під час виконання дізнатися, на якій платформі працює гра?

Відповідь: Так, див. sys.get_sys_info().

Запитання про редактор

Запитання: Які системні вимоги редактора?

Відповідь: Редактор використовуватиме до 75% доступної системної пам’яті. На комп’ютері з 4 ГБ оперативної пам’яті цього має вистачити для невеликих проєктів Defold. Для середніх і великих проєктів рекомендовано 6 ГБ оперативної пам’яті або більше.

Запитання: Чи оновлюються бета-версії Defold автоматично?

Відповідь: Так. Бета-версія редактора Defold перевіряє наявність оновлень під час запуску, як і стабільна версія Defold.

Запитання: Чому під час запуску редактора з’являється помилка java.awt.AWTError: Assistive Technology not found?

Відповідь: Ця помилка пов’язана з проблемами допоміжних технологій Java, як-от засобу читання з екрана NVDA. Імовірно, у вашій домашній папці є файл .accessibility.properties. Видаліть його та спробуйте запустити редактор знову. (Примітка: якщо ви використовуєте допоміжні технології й цей файл вам потрібен, напишіть нам на info@defold.se, щоб обговорити інші способи розв’язання проблеми).

Обговорення є в цій темі на форумі Defold.

Запитання: Чому під час запуску редактора з’являється помилка sun.security.validator.ValidatorException: PKIX path building failed?

Відповідь: Цей виняток виникає, коли редактор намагається встановити з’єднання HTTPS, але не може перевірити ланцюжок сертифікатів, наданий сервером.

Докладніше про цю помилку див. за цим посиланням.

Запитання: Чому під час виконання певних операцій з’являється помилка java.lang.OutOfMemoryError: Java heap space?

Відповідь: Редактор Defold створено за допомогою Java, і в деяких випадках стандартних налаштувань пам’яті Java може бути недостатньо. Якщо це сталося, ви можете вручну налаштувати редактор на виділення більшого обсягу пам’яті, відредагувавши його файл конфігурації. У macOS файл конфігурації з назвою config розташований у папці Defold.app/Contents/Resources/. У Windows він розташований поруч із виконуваним файлом Defold.exe, а в Linux — поруч із виконуваним файлом Defold. Відкрийте файл config і додайте -Xmx6gb до рядка, що починається з vmargs. Додавання -Xmx6gb задає максимальний розмір купи пам’яті 6 гігабайтів (за замовчуванням зазвичай 4 ГБ). Результат має виглядати приблизно так:

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

Запитання: Чому редактор Defold виглядає дуже дрібним на моніторі 4K або HiDPI?

Відповідь: Якщо ви використовуєте GNOME, можна змінити коефіцієнт масштабування перед запуском Defold. Джерело

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

Відповідь: Інший спосіб, особливо якщо потрібен дробовий коефіцієнт збільшення, — змінити файл 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.

Відповідь: Якщо ви використовуєте KDE, можна задати GDK_SCALE:

$ GDK_SCALE=2 ./Defold

Запитання: Чому в Elementary OS клацання мишею проходять крізь редактор до вмісту під ним?

Відповідь: Запустіть редактор так:

$ GTK_CSD=0 ./Defold

Запитання: Редактор Defold аварійно завершує роботу під час відкриття колекції або ігрового об’єкта, а в повідомленні про збій згадано com.jogamp.opengl

Відповідь: У деяких дистрибутивах (як-от 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

Запитання: Чому під час запуску Defold з’являється помилка «com.jogamp.opengl.GLException: Graphics configuration failed»?

Відповідь: У деяких дистрибутивах (наприклад, Ubuntu 20.04) під час роботи Defold виникає проблема з новими драйверами Mesa (Iris). Ви можете спробувати запустити Defold зі старішою версією драйвера:

$ MESA_LOADER_DRIVER_OVERRIDE=i965 ./Defold

Запитання: Редактор Defold аварійно завершує роботу під час відкриття колекції або ігрового об’єкта, а в повідомленні про збій згадано libffi.so

Відповідь: Версія 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

Далі під час запуску Defold вкажіть шлях до цієї версії у змінній середовища LD_PRELOAD:

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

Запитання: Мої драйвери OpenGL застаріли. Чи можу я користуватися Defold?

Відповідь: Так, можливо, ви зможете користуватися Defold, якщо ввімкнете програмний рендеринг. Для цього задайте змінній середовища LIBGL_ALWAYS_SOFTWARE значення 1:

$ LIBGL_ALWAYS_SOFTWARE=1 ./Defold

Запитання: Чому моя гра Defold не запускається в Linux?

Відповідь: Перевірте виведення консолі в редакторі. Якщо ви бачите таке повідомлення:

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

Запитання: Чому верхнє меню закривається, перш ніж я встигаю щось вибрати?

Відповідь: Імовірно, це спричинено віконним менеджером, який ви використовуєте (наприклад, 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,...

Запитання: Чому після вибору Open From Disk я не можу переглянути всі доступні розташування файлів?

Відповідь: Якщо ви запускаєте Defold зі Steam, встановленого через Flatpak, потрібно надати Steam дозвіл на доступ до інших дисків. Змінити дозволи застосунків Flatpak можна за допомогою Flatseal або подібного засобу.

Запитання: Чому я не можу відкрити вебпрофайлер або скористатися іншими пунктами меню, що потребують браузера?

Відповідь: Імовірно, внутрішній виклик Desktop.getDesktop().browse(new URI(url)); завершується помилкою, оскільки в системах без GNOME браузер не виявляється. Спробуйте встановити libgnome.

$ apt-get install libgnome

Запитання про Android

П: Чи можна приховати панелі навігації та стану в Android?

В: Так, увімкніть налаштування immersive_mode у розділі Android файлу game.project. Це дасть вашому застосунку змогу зайняти весь екран і перехоплювати всі події дотику на екрані.

П: Чому під час установлення гри Defold на пристрій з’являється помилка “Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]”?

В: Android виявляє спробу встановити застосунок із новим сертифікатом. Під час пакування налагоджувальних збірок кожну збірку підписують тимчасовим сертифікатом. Видаліть старий застосунок перед установленням нової версії:

$ 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

П: Чому під час збирання з певними розширеннями виникають помилки через конфлікт властивостей в AndroidManifest.xml?

В: Це може статися, коли два або більше розширень надають фрагменти маніфесту Android з однаковим тегом властивості, але різними значеннями. Наприклад, таке траплялося з 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. 

Докладніше про проблему та спосіб її обходу можна прочитати в повідомленні про проблему Defold #9453 і повідомленні про проблему Google #327696048.

Запитання про HTML5

П: Чому мій застосунок HTML5 зависає на заставці в Chrome?

В: У деяких випадках гру неможливо запустити в браузері безпосередньо з локальної файлової системи. Під час запуску з редактора гра обслуговується локальним вебсервером. Ви можете, наприклад, скористатися SimpleHTTPServer у Python:

$ python -m SimpleHTTPServer [port]

П: Чому моя гра аварійно завершується з помилкою “Unexpected data size” під час завантаження?

В: Зазвичай це трапляється, коли ви створюєте збірку у Windows і додаєте її до Git. Якщо завершення рядків у Git налаштовано неправильно, Git змінюватиме їх, а отже, і розмір даних. Щоб розв’язати проблему, дотримуйтеся цих інструкцій: https://docs.github.com/en/free-pro-team@latest/github/using-git/configuring-git-to-handle-line-endings

Запитання про iOS

П: Не вдається встановити гру Defold за допомогою безкоштовного облікового запису Apple Developer.

В: Переконайтеся, що ідентифікатор пакета у вашому проєкті Defold збігається з ідентифікатором у проєкті Xcode, який ви використовували для створення мобільного профілю підготовки.

П: Як перевірити права доступу пакета застосунку?

В: Із розділу «Перевірка прав доступу зібраного застосунку»:

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

П: Як перевірити права доступу профілю підготовки?

В: Із розділу «Перевірка прав доступу профілю»:

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

Запитання про Windows

Запитання: Чому вузли Box у GUI без текстури прозорі в редакторі, але відображаються як очікується після збирання й запуску?

Відповідь: Ця помилка може виникати на комп’ютерах із графічними процесорами AMD Radeon. Обов’язково оновіть графічні драйвери.

Запитання: Чому під час відкриття атласу або вікна сцени з’являється помилка com.sun.jna.Native.open.class java.lang.Error: Access is denied?

Відповідь: Спробуйте запустити Defold від імені адміністратора. Клацніть виконуваний файл Defold правою кнопкою миші та виберіть «Run as Administrator».

Запитання: Чому моя гра неправильно відображається у Windows із вбудованим графічним процесором Intel UHD, хоча збірка HTML5 працює?

Відповідь: Обов’язково оновіть драйвер до версії 27.20.100.8280 або новішої. Перевірте його за допомогою Intel Driver Support Assistant. Додаткову інформацію наведено в цьому дописі на форумі.

Запитання: Редактор 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

Запитання про консолі

П: Чи потрібно встановлювати додаткові інструменти для збирання для консолей?

В: Ви зможете створювати пакети застосунків у редакторі та за допомогою засобів командного рядка. Інформацію про тестування на пристроях PlayStation®4, PlayStation®5 і Nintendo Switch вам нададуть разом із доступом до відповідних платформ.

П: Чи буде так само легко використовувати єдину кодову базу, якщо я вирішу також підтримувати консолі?

В: Так, усі стандартні функції API Defold доступні й на консольних платформах. Крім стандартних можливостей, ви отримаєте доступ до кількох функцій, специфічних для PlayStation®4, PlayStation®5 і Nintendo Switch. Загалом код може залишатися цілком однаковим на різних платформах.

Публікування ігор

Запитання: Я намагаюся опублікувати гру в AppStore. Як відповісти на запитання про IDFA?

Відповідь: Під час подання застосунку Apple пропонує три прапорці для трьох допустимих способів використання IDFA:

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

Якщо вибрати варіант 1, перевіряльник застосунку шукатиме в ньому рекламу. Якщо ваша гра не показує реклами, її можуть відхилити. Сам Defold не використовує рекламний ідентифікатор.

Запитання: Як монетизувати свою гру?

Відповідь: Defold підтримує покупки в застосунку та різні рекламні рішення. Актуальний перелік доступних способів монетизації див. у категорії Monetization на порталі Defold Assets.

Помилки під час використання Defold

Запитання: Не вдається запустити гру, але помилок збирання немає. У чому річ?

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

Вміст гри

Запитання: Чи підтримує Defold префаби?

Відповідь: Так. Вони називаються колекціями (collections). Вони дають змогу створювати складні ієрархії ігрових об’єктів (game objects) і зберігати їх як окремі будівельні блоки, екземпляри яких можна створювати в редакторі або під час виконання (створюючи екземпляри колекцій). Для вузлів GUI підтримуються шаблони GUI.

Запитання: Чому я не можу додати ігровий об’єкт як дочірній до іншого ігрового об’єкта?

Відповідь: Найімовірніше, ви намагаєтеся додати дочірній об’єкт у файлі ігрового об’єкта, а це неможливо. Так можна робити лише у файлі колекції. Щоб зрозуміти причину, пам’ятайте: батьківсько-дочірні ієрархії — це суто ієрархії трансформацій графа сцени. Ігровий об’єкт, який ще не розміщено (або не створено) у сцені (колекції), не є частиною графа сцени, а отже, не може бути частиною його ієрархії. Ідентифікатор батьківського об’єкта ігрового об’єкта можна отримати за допомогою go.get_parent().

Запитання: Чому я не можу розіслати повідомлення всім дочірнім об’єктам ігрового об’єкта?

Відповідь: Зв’язки між батьківськими та дочірніми об’єктами виражають лише зв’язки трансформацій у графі сцени, і їх не слід плутати з агрегацією в об’єктно-орієнтованому програмуванні. Якщо зосередитися на даних гри та на тому, як найкраще їх перетворювати зі зміною стану гри, імовірно, потреба постійно надсилати повідомлення з даними стану багатьом об’єктам зменшиться. Коли вам усе ж потрібні ієрархії даних, їх легко створювати й обробляти в Lua.

Запитання: Чому на краях моїх спрайтів з’являються візуальні артефакти?

Відповідь: Це візуальний артефакт під назвою «просочування країв» (edge bleeding), коли крайні пікселі сусідніх зображень в атласі потрапляють у зображення, призначене вашому спрайту. Розв’язання — додати до країв зображень атласу додаткові рядки та стовпці однакових пікселів. На щастя, редактор атласів Defold може зробити це автоматично. Відкрийте атлас і встановіть для Extrude Borders значення 1.

Запитання: Чи можна тонувати спрайти або робити їх прозорими, чи для цього потрібно писати власний шейдер?

Відповідь: У вбудованому шейдері спрайтів, який за замовчуванням використовується для всіх спрайтів, визначено константу «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))

Запитання: Якщо встановити координату z спрайта на 100, він не відображається. Чому?

Відповідь: Позиція ігрового об’єкта за віссю Z визначає порядок рендерингу. Об’єкти з меншими значеннями малюються раніше за об’єкти з більшими. Стандартний скрипт рендерингу малює ігрові об’єкти з глибиною від -1 до 1; усе за межами цього діапазону не малюється. Докладніше про скрипт рендерингу можна прочитати в офіційній документації з рендерингу. Для вузлів GUI значення Z ігнорується й зовсім не впливає на порядок рендерингу. Натомість вузли малюються в порядку, у якому їх перелічено, та відповідно до дочірніх ієрархій (і шарів). Докладніше про рендеринг GUI та оптимізацію викликів малювання за допомогою шарів читайте в офіційній документації GUI.

Запитання: Чи вплине на продуктивність зміна діапазону Z проєкції огляду на значення від -100 до 100?

Відповідь: Ні. Це впливає лише на точність. Буфер глибини логарифмічний і має дуже високу роздільну здатність для значень z поблизу 0 та нижчу — далі від 0. Наприклад, у 24-бітному буфері можна розрізнити значення 10.0 і 10.000005, а 10000 і 10005 — ні.

Запитання: Чому кути подано непослідовно?

Відповідь: Насправді послідовність є. Усюди в редакторі та ігрових API кути задають у градусах. Математичні бібліотеки використовують радіани. Наразі винятком є фізична властивість angular_velocity, яку виражено в радіанах за секунду. Очікується, що це зміниться.

Запитання: Як відображатиметься вузол GUI типу box, якщо задати лише колір без текстури?

Відповідь: Це просто фігура з кольорами вершин. Пам’ятайте, що її рендеринг усе одно потребує ресурсів заповнення пікселів.

Запитання: Якщо я змінюватиму ресурси під час роботи, чи вивантажуватиме їх рушій автоматично?

Відповідь: Для всіх ресурсів усередині рушія ведеться підрахунок посилань. Щойно кількість посилань дорівнює нулю, ресурс звільняється.

Запитання: Чи можна відтворювати аудіо без звукового компонента, прикріпленого до ігрового об’єкта?

Відповідь: Усе побудовано на компонентах (components). Можна створити ігровий об’єкт без візуального представлення з кількома звуками та відтворювати їх, надсилаючи повідомлення об’єкту, що керує звуком.

Запитання: Чи можна під час виконання змінити аудіофайл, пов’язаний зі звуковим компонентом?

Відповідь: Загалом усі ресурси оголошуються статично, завдяки чому керування ними не потребує додаткових зусиль. За допомогою властивостей ресурсів можна змінити ресурс, призначений компоненту.

Запитання: Чи можна отримати доступ до властивостей фізичної форми колізії?

Відповідь: Так, див. API фізики, зокрема physics.get_shape() та physics.set_shape().

Запитання: Чи можна швидко відобразити об’єкти колізій у моїй сцені? (Як налагоджувальне малювання в Box2D)

Відповідь: Так, установіть прапорець physics.debug у game.project. (Див. офіційну документацію з налаштувань проєкту)

Запитання: Як велика кількість контактів і колізій впливає на продуктивність?

Відповідь: Defold використовує модифіковану версію Box2D, тому витрати ресурсів мають бути приблизно такими самими. Ви завжди можете перевірити, скільки часу рушій витрачає на фізику, відкривши профайлер. Також варто враховувати, які типи об’єктів колізій ви використовуєте. Наприклад, статичні об’єкти потребують менше ресурсів. Докладніше див. в офіційній документації з фізики Defold.

Запитання: Як велика кількість компонентів ефектів частинок впливає на продуктивність?

Відповідь: Це залежить від того, чи відтворюються вони. Ефект ParticleFx, який не відтворюється, не впливає на продуктивність. Вплив ефекту ParticleFx, який відтворюється, слід оцінювати за допомогою профайлера, адже він залежить від налаштувань ефекту. Як і для більшості інших елементів, пам’ять виділяється заздалегідь для кількості ефектів ParticleFx, визначеної параметром max_count у game.project.

Запитання: Як отримувати введення в ігровому об’єкті всередині колекції, завантаженої через проксі колекції?

Відповідь: Кожна колекція, завантажена через проксі колекції (collection proxy), має власний стек введення. Введення передається зі стека введення головної колекції через компонент проксі до об’єктів у завантаженій колекції. Це означає, що недостатньо надати фокус введення лише ігровому об’єкту в завантаженій колекції: ігровий об’єкт, який містить компонент проксі, також має отримати фокус введення. Докладніше див. у документації з введення.

Запитання: Чи можна використовувати властивості скриптів рядкового типу?

Відповідь: Ні. Defold підтримує властивості типу hash. Їх можна використовувати для позначення типів, ідентифікаторів стану або будь-яких ключів. Хеші також можна використовувати для зберігання ідентифікаторів (шляхів) ігрових об’єктів, хоча властивості url часто зручніші, оскільки редактор автоматично заповнює для вас розкривний список відповідними URL. Докладніше див. у документації з властивостей скриптів.

Запитання: Як отримати доступ до окремих елементів матриці (створеної за допомогою vmath.matrix4() або подібної функції)?

Відповідь: Доступ до елементів можна отримати через mymatrix.m11, mymatrix.m12, mymatrix.m21 тощо

Запитання: Під час використання gui.clone() або gui.clone_tree() я отримую повідомлення Not enough resources to clone the node

Відповідь: Збільште значення Max Nodes компонента GUI. Його можна знайти на панелі Properties, вибравши корінь компонента в Outline.

Форум

Запитання: Чи можна створити тему з рекламою своєї роботи?

Відповідь: Звісно! Для цього є спеціальна категорія «Work for hire». Ми завжди заохочуватимемо все, що приносить користь спільноті, і пропонування своїх послуг спільноті — за винагороду чи безкоштовно — є добрим прикладом.

Запитання: Я створив тему й додав свої роботи. Чи можна додати ще?

Відповідь: Щоб зменшити кількість підняттів тем у категорії «Work for hire», у власній темі можна писати не частіше ніж раз на 14 днів (виняток — пряма відповідь на коментар у темі: у такому разі відповідати можна). Якщо протягом цих 14 днів ви хочете додати до теми інші роботи, відредагуйте наявні дописи, додавши новий вміст.

Запитання: Чи можна публікувати вакансії в категорії Work for Hire?

Відповідь: Звісно, сміливо публікуйте! У ній можна як пропонувати послуги, так і шукати фахівців, наприклад: «Програміст шукає художника, який створює 2D-піксельну графіку; я багатий і добре заплачу».