如何在 Lua 中显示调试信息或 console.log 等价物

我正在使用 Lua 和 LOVE2D 创建很多游戏,但每当我实现一个新功能并想要测试它,或者仅仅想知道 Lua 中的变量值时,我要么在游戏屏幕上显示它,要么只是希望它能够正常工作。

现在我的问题是... 是否有一种方法可以显示一些信息,比如变量值或其他内容到终端或其他地方?就像在 JavaScript 中的 console.log 在浏览器的控制台中显示内容一样。那么,在 Lua 中是否有这样的方法?使用 LOVE2D 如何实现?

我正在使用 Mac,所以我有一个 terminal 而不是命令提示符。有没有方法在那里显示一些内容?任何其他地方也可以,我只需要看看那些值是否符合预期。

点赞
用户3371355
用户3371355

使用 conf.lua 文件启用控制台,然后你就可以使用标准的 print() 函数。你可以在这里阅读 wiki 条目(https://love2d.org/wiki/Config_Files)。

注意:必须通过终端运行 Lua 和 Love2D 才能使其正常工作。必须使用此类方式运行 Lua 和 Love2D 才能显示打印语句:

/Applications/love.app/Contents/MacOS/love "/Users/myuser/Desktop/love2d-test-proj"

你只需要在与 main.lua 相同的位置添加一个 conf.lua 文件。你的文件可能只有这样简单:

function love.conf(t)
    t.console = true
end

但请随意复制上面链接中的整个配置文件,并编辑您需要的内容。

我不能完全确定这一点,因为我无法访问 Mac,但控制台默认是禁用的,即使在 Windows 上也要打开才能显示打印的内容。

另外,你也可以像某些游戏那样在游戏本身中显示调试信息。

我喜欢做的是添加一些 debugVariable = {} 用于记录每个循环中发生的事件,以及 debugPermanent = {} 用于记录不常发生的事件。可以添加方便的函数来写入这些变量:

function debugAddVariable(str)
  table.insert(debugVariable, str)
end
--..and similarly for debugPermanent

现在,画出我们调试信息的函数:

function debugDraw()
  love.graphics.push()  --remember graphics state

  love.graphics.origin()  --clear any previous transforms

  love.graphics.setColor(--[[select color for debug info]])
  love.graphics.setFont(--[[select font for debug info]])

  for i, v in ipairs(debugPermanent) do
    love.graphics.print(v)
    love.graphics.translate(0, --[[fontHeight]])
  end
  for i, v in ipairs(debugVariable) do
    love.graphics.print(v)
    love.graphics.translate(0, --[[fontHeight]])
  end

  debugVariable = {}   --clear debugVariable to prepare it for the next loop
  love.graphics.pop()  --recall graphics state
end

我们只需要在 love.draw() 的结尾调用此绘制函数,文字应该会出现。

显然,此方法可以进一步精炼,几乎可以无限地进行改进,显示特定变量,并添加图表以澄清你想要显示的信息,但这已经超出了这个问题的范围。

最后,请随意访问此处,查看用户提交的调试库。

2021-01-16 07:30:49