Lua “退出”读作“零”字段?
我正在为我的游戏制作一个菜单文件,它不能作为一个字段调用quit。它总是返回零。谁能告诉我为什么会这样?注意,它是在代码前面声明的,另一个按钮函数也可以工作。谢谢Lua “退出”读作“零”字段?,lua,love2d,Lua,Love2d,我正在为我的游戏制作一个菜单文件,它不能作为一个字段调用quit。它总是返回零。谁能告诉我为什么会这样?注意,它是在代码前面声明的,另一个按钮函数也可以工作。谢谢 function love.mousepressed( x, y, button ) if button == "l" then for k, v in pairs(buttons) do local ins = insideBox( x, y, v.x - (v.w/2), v.y - (v.h/2), v.
function love.mousepressed( x, y, button )
if button == "l" then
for k, v in pairs(buttons) do
local ins = insideBox( x, y, v.x - (v.w/2), v.y - (v.h/2), v.w, v.h)
if ins then
if v.action == "play" then
loadState("game")
end
end
if ins then
if v.action == "quit" then
love.event.quit()
end
end
end
end
end
为什么要将播放和退出绑定到同一个按钮?o、 o
而且,没有必要登记两次。重复代码应为红色标志:
if ins then
if v.action == "play" then
loadState("game")
end
end
if ins then
if v.action == "quit" then
love.event.quit()
end
end
这可能是:
if ins then
if v.action == "play" then
loadState("game")
elseif v.action == "quit" then
love.event.quit()
end
end
但除了使用调试器之外,以下是跟踪此类问题的方法:
一,。在项目文件夹中创建名为的文件
二,。里面至少有这么多,以便将控制台连接到应用程序:
function love.conf(t)
t.console = true -- Attach a console (Windows only)
end
三,。将调试输出添加到mousepressed函数中,以便查看发生了什么
首先,在应用程序执行的早期某处定义它。便捷的打印功能:
function printf(...) print(string.format(...)) end
function love.mousepressed(x, y, button)
print('mouse button %d pressed at %d, %d', button, x, y)
if button == "l" then
printf('checking %d buttons', #buttons)
for k, v in pairs(buttons) do
local ins = insideBox( x, y, v.x - (v.w/2), v.y - (v.h/2), v.w, v.h)
printf('%d, %d is%sinside button %s (%d, %d, %d, %d)',
ins and ' ' or ' not ', k, x, y, v.x, v.y, v.w, v.h)
if ins then
print('executing action', v.action)
if v.action == "play" then
loadState("game")
elseif v.action == "quit" then
love.event.quit()
end
end
end
end
end
然后向函数中添加一些调试内容:
function printf(...) print(string.format(...)) end
function love.mousepressed(x, y, button)
print('mouse button %d pressed at %d, %d', button, x, y)
if button == "l" then
printf('checking %d buttons', #buttons)
for k, v in pairs(buttons) do
local ins = insideBox( x, y, v.x - (v.w/2), v.y - (v.h/2), v.w, v.h)
printf('%d, %d is%sinside button %s (%d, %d, %d, %d)',
ins and ' ' or ' not ', k, x, y, v.x, v.y, v.w, v.h)
if ins then
print('executing action', v.action)
if v.action == "play" then
loadState("game")
elseif v.action == "quit" then
love.event.quit()
end
end
end
end
end
您还应该使用有意义的变量名。v可以是按钮。什么是k?索引?那么也许我还是索引。是名字吗?然后是你的名字。诸如此类。k什么也没告诉我们。什么东西不管用?你不能触发love.event.quit呼叫?或者love.event.quit调用没有执行任何操作?love.event.quit正在触发,但字段quit返回为nil。我原以为可能是v.action==quit部分,但代码前面已经调用了它。您没有使用love.event.quit的返回值执行任何操作,所以我不知道您如何知道它返回了什么。你的意思是说这不是放弃你的游戏?love.event.quit是您编写的函数吗?如果是这样,请将其包含在您的post.love.event.quit中。它是在love2d引擎中构建的,我相信它不需要参数,也不返回任何内容,并且应该像它一样工作。我用love.keypressed函数使它工作,但mousepressed对我来说永远不起作用。你确定如果正在执行block吗?当按钮、ins和v.action出现故障时,是否可以打印其值?