Введение в Defold

Опубликовано:

Обзор возможностей

Defold — это 2D/3D игровой движок с открытым исходным кодом, который хорошо подходит для быстрого старта в геймдеве, так как не нагружает лишними сложностями в архитектуре. На нем разрабатываются игры под широкий спектр платформ. В качестве основного языка используется Lua (версия LuaJIT, дающая максимальную скорость), который лаконичен и позволяет не отвлекаться на сложный синтаксис, фокусируясь на логике самой игры.

В отличие от тяжеловесных Unity или Unreal Engine, Defold не пытается быть комбайном "все в одном" и не навязывает громоздкие визуальные редакторы, сохраняя строгий, предсказуемый и ориентированный на код подход. Движок поставляется в виде единой легковесной IDE (под Windows, Linux, MacOS), которая, однако, имеет все необходимое: работа со сценами, тайлмапами, частицами, UI, а также встроенный код-ректор и отладчик.

Defold нельзя отнести к самым популярным игровым движкам, так как в общем рейтинге он занимает позиции после первой десятки. Однако его доля в разработке HTML5-игр и мобильной ощутима, так как он проектировался под эти среды и лучше подходит. Под другие (десктопы и консоли) преимущества Defold нивелируются, в то время как ограничения становятся существенными (при разработке сложного 3D в Defold придется писать много низкоуровневого кода, также он имеет малое количество готовых ассетов). При все этом Defold и здесь хорошо себя чувствует, если речь идет о 2D-играх.

В вебе, в том числе на платформах вроде Яндекс Игр и VK Play, скорость загрузки критична. Пустая сцена на Defold, скомпилированная в HTML5, весит около 1–2 МБ. Для сравнения, у Unity или Unreal Engine "пустышка" может превышать 100 МБ.

Defold компилирует код напрямую в WebAssembly, обеспечивая близкую к нативной скорость работы непосредственно в браузере. Также у него хорошая интеграция с WebGL.

Созданные в Defold сложные 2D-игры могут запускаться даже на бюджетных смартфонах. Движок написан на C++ с акцентом на memory management (в нем практически нет утечек памяти и микрофризов из-за сборщика мусора, так как Lua-скрипты работают поверх быстрого ядра).

Концепции Defold

Defold реализует такие концепции геймдева как игровой цикл (game loop), компонентный подход (ECS-подобная структура), система координат и событийная модель.

Компонентный подход (Data-Driven / ECS) предполагает, что данные лежат в компонентах, а логика — в скриптах. ООП здесь часто избыточен, поэтому нет необходимости писать на Lua в ООП-стиле со сложным наследованием через метатаблицы. Скрипты прикрепляются к игровым объектам (game objects).

Событийно-ориентированная архитектура (Event-Driven) предполагает, что объекты не вызывают методы друг друга напрямую, а должны "общаться" между собой путем рассылки сообщений (messages), которы они отправляют в общее "пространство". При этом между объектами нет сложных наследственных взаимосвязей.

О курсе (цикле статей)

Разрабатываемый нами цикл статей-уроков по Defold будет предполагать подход от простого к сложному, когда сложность наращивается пошагово, можно сказать, по одному элементу за урок. Основная целевая аудитория — имеющие опыт программирования на любых языках, ознакомленные с Lua, но новички в геймдеве.