Defold включает в себя встроенный отладчик Lua с возможностью инспекции. Вместе со встроенными инструментами профилирования — это мощный инструмент, который может помочь найти причину ошибок в логике игры или помочь проанализировать проблемы производительности.
Самый простой способ отладить игру в Defold заключается в использовании print-отладки, или трассировки. Используйте операторы print()
или pprint()
для наблюдения за переменными или для индикации хода выполнения. Если игровой объект без скрипта ведет себя странно, можно просто прикрепить к нему скрипт с единственной целью отладки. Использование любой из функций печати приведет к выводу в Console в редакторе и в лог.
Помимо печати, движок может рисовать на экране отладочный текст и прямые линии. Это делается путем отправки сообщений в сокет @render
:
-- Нарисовать на экране значение "my_val" с отладочным текстом
msg.post("@render:", "draw_text", { text = "My value: " .. my_val, position = vmath.vector3(200, 200, 0) })
-- Нарисовать цветной текст на экране
local color_green = vmath.vector4(0, 1, 0, 1)
msg.post("@render:", "draw_debug_text", { text = "Custom color", position = vmath.vector3(200, 180, 0), color = color_green })
-- Нарисовать на экране отладочную линию между игроком и врагом
local start_p = go.get_position("player")
local end_p = go.get_position("enemy")
local color_red = vmath.vector4(1, 0, 0, 1)
msg.post("@render:", "draw_line", { start_point = start_p, end_point = end_p, color = color_red })
Сообщения визуальной отладки добавляют данные в пайплайн рендеринга и отрисовываются как часть обычного рендер пайплайна.
"draw_line"
добавляет данные, которые выводятся с помощью функции render.draw_debug3d()
в рендер-скрипте."draw_text"
рендерится с помощью /builtins/fonts/debug/always_on_top.font
, который использует материал /builtins/fonts/debug/always_on_top_font.material
."draw_debug_text"
это то же самое, что и "draw_text"
, но отображается в пользовательском цвете.Следует отметить, что, вероятно, потребуется обновлять эти данные каждый кадр, поэтому размещение сообщений в функции update()
является хорошей идеей.
Чтобы запустить отладчик, либо выберите Debug ▸ Run with Debugger, который запускает игру с подключенным отладчиком, либо Debug ▸ Attach Debugger, чтобы подключить отладчик к уже запущенной игре.
Как только отладчик подключен, можно контролировать выполнение игры через кнопки управления отладчиком в консоли или через меню Debug:
end
ниже строки с вызовом функции nextspawn()
:
Строка Lua-кода не соответствует одному выражению. Шаг в отладчике перемещается вперед по одному выражению за раз, что означает, что в настоящее время для перехода к следующей строке может потребоваться нажать кнопку шага несколько раз.
nextspawn()
:
Чтобы установить или убрать точку останова, кликните в колонке справа от номеров строк в редакторе кода. Также можно выбрать в меню Edit ▸ Toggle Breakpoint.
В настоящее время нет возможности изменять переменные через функцию вычисления.
Lua поставляется с библиотекой отладки, которая полезна в некоторых ситуациях, особенно если необходимо исследовать внутренности окружения Lua. За подробностями обращайтесь к веб-странице http://www.lua.org/pil/contents.html#23.
Если вы столкнулись с ошибкой или если ваша игра ведет себя не так, как ожидалось, вот контрольный список для отладки:
Проверьте вывод консоли и убедитесь в отсутствии ошибок времени выполнения.
Добавьте операторы print
в код, чтобы убедиться, что код действительно выполняется.
Если он не запускается, проверьте, правильно ли вы выполнили настройки в редакторе, необходимые для запуска кода. Добавлен ли скрипт к нужному игровому объекту? Приобрел ли скрипт фокус ввода? Правильны ли триггеры ввода? Добавлен ли код шейдера к материалу? И т.д.
Если код зависит от значений переменных (например, в выражении if), либо примените print
к этим значениям там, где они используются или проверяются, либо проверьте их с помощью отладчика.
Иногда поиск ошибки может быть сложным и трудоемким процессом, требующим от вас пройтись по коду бит за битом, проверяя все, сужая круг неисправного кода и устраняя источники ошибок. Лучше всего для этого подходит метод под названием “разделяй и властвуй”:
Удачной охоты!
Если возникли проблемы с физикой и столкновения работают не так, как ожидалось, рекомендуется включить отладку физики. Отметьте опцию Debug в секции Physics файла game.project:
Когда эта опция включена, Defold отрисовывает все формы и контактные точки столкновений:
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB