This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold 包含一个带有检查功能的集成 Lua 调试器。与内置的分析工具一起,它是一个强大的工具,可以帮助您找到游戏逻辑中错误的原因或帮助分析性能问题。
在 Defold 中调试游戏的最简单方法是使用打印调试。使用 print()
或 pprint()
语句来观察变量或指示执行流程。如果一个没有脚本的游戏对象表现异常,您可以只附加一个脚本,其唯一目的是调试。使用任何打印函数都会在编辑器的控制台视图和游戏日志中打印。
除了打印之外,引擎还可以在屏幕上绘制调试文本和直线。这是通过向 @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 ▸ Start/Attach,这将以附加的调试器启动游戏或将调试器附加到已经运行的游戏上。
一旦调试器附加,您就可以通过控制台中的调试器控制按钮或通过 Debug 菜单控制游戏的执行:
nextspawn()
函数的行下方的 end
语句处:
一行 Lua 代码并不对应单个表达式。在调试器中步进是一次推进一个表达式,这意味着目前您可能需要多次按下步进按钮才能推进到下一行。
nextspawn()
函数:
要设置或清除断点,请在代码编辑器中行号右侧的列中单击。您也可以从菜单中选择 Edit ▸ Toggle Breakpoint。
要编辑断点条件,请在代码编辑器中行号右侧的列中右键单击,或从菜单中选择 Edit ▸ Edit Breakpoint。
目前无法通过评估器修改变量。
Lua 附带一个在某些情况下有用的调试库,特别是如果您需要检查 Lua 环境的内部。您可以在 Lua 手册中关于调试库的章节 中找到更多相关信息。
如果您遇到错误或您的游戏行为不符合预期,这里有一个调试检查清单:
检查控制台输出并验证没有运行时错误。
向代码中添加 print
语句以验证代码确实在运行。
如果代码没有运行,请检查您是否已在编辑器中完成了代码运行所需的正确设置。脚本是否添加到正确的游戏对象?您的脚本是否获取了输入焦点?输入触发器是否正确?着色器代码是否添加到材质?等等。
如果您的代码依赖于变量的值(例如在 if 语句中),要么在使用或检查这些变量的位置 print
这些值,要么使用调试器检查它们。
有时查找错误可能是一个困难和耗时的过程,需要您逐位检查代码,检查所有内容并缩小有问题的代码范围并消除错误源。这最好通过称为”分而治之”的方法来完成:
祝您调试愉快!
如果您在物理方面遇到问题,碰撞没有按预期工作,建议启用物理调试。在 game.project 文件的 Physics 部分中勾选 Debug 复选框:
当此复选框启用时,Defold 将绘制所有碰撞形状和碰撞接触点:
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB