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

Raj*_*noi 5 debugging lua love2d console.log

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

现在我的问题是......有没有办法在终端或其他地方显示一些信息,例如变量值或其他内容?就像console.log在 javascript 中一样,它在浏览器的 javascript 控制台中显示一些内容。那么,Lua 有没有办法做到这一点?使用LOVE2D?

我使用的是 Mac,因此有terminal命令提示符,但没有命令提示符。有没有办法在那里显示一些内容?其他地方也可以,我只需要看看这些值是否符合预期。

Isa*_*awU 4

使用conf.lua文件来启用控制台,然后您应该能够使用标准的print(). 您可以在此处阅读 wiki 条目。

注意:您必须通过终端运行 Lua 和 Love2D 才能正常工作。像这样运行 Lua 和 Love2D 需要打印语句显示:

/Applications/love.app/Contents/MacOS/love "/Users/myuser/Desktop/love2d-test-proj"
Run Code Online (Sandbox Code Playgroud)

您只需将一个conf.lua文件添加到main.lua. 您的文件可能像这样简单:

function love.conf(t)
    t.console = true
end
Run Code Online (Sandbox Code Playgroud)

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

我不能完全确定这一点,因为我无法访问 Mac,但控制台默认处于禁用状态,即使在 Windows 上,在打开它之前也不会显示打印内容。

或者,您也可以像某些游戏一样在游戏本身中显示调试信息。

我喜欢做的是添加一些内容,例如debugVariable = {}记录每个循环中发生的事件以及debugPermanent = {}很少发生的事件。可能添加方便的函数来写入变量:

function debugAddVariable(str)
  table.insert(debugVariable, str)
end
--..and similarly for debugPermanent
Run Code Online (Sandbox Code Playgroud)

现在有一个函数来绘制我们的调试信息:

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
Run Code Online (Sandbox Code Playgroud)

我们只需在我们的末尾调用这个绘制函数love.draw(),文本就会出现。

显然,这种方法可以进一步细化,几乎无限地,显示特定的变量,并为其他一些变量添加图表以澄清您想要显示的信息,但这有点超出了问题的范围。

最后,请随时在此处检查用户提交的调试库。