Lua “退出”读作“零”字段?

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.

我正在为我的游戏制作一个菜单文件,它不能作为一个字段调用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.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出现故障时,是否可以打印其值?