Lua 中有"Get Keyboard Input"功能吗?(方向键)



我想知道你是否可以像Java、C++等一样接收键盘输入。或者如果没有,是否有外部库?

以下是关于2D迷宫游戏的一些信息:您可以使用箭头键在迷宫中导航。使用向上和向下箭头键选择菜单中的对象,例如:

-->新游戏

加载游戏

选项

等等…我很感激任何帮助。你好。

Lua本身不提供任何不属于ANSI C的库,这是该语言广泛可移植性的一部分。

因此,您会错过键盘输入和图形之类的东西,但也会错过可能被认为"简单"的操作,比如在目录中列出文件。

最有可能的是,有一个库可以满足您的需求,如果没有,请记住Lua是编写C端库最友好的语言之一。

LOVE是一个很好的框架,它或多或少地将Lua的一些扩展(包括SDL的一个相当抽象的接口)与分发方法结合在一起。如果你正在和Lua一起开发游戏,这是一个很好的开始。

编辑:如果你在使用LuaJIT的Windows上,并且你对全局密钥挂钩很满意,那么我最近(2015年5月)开发了一个库来解决这个问题:https://github.com/LPGhatguy/global-keys

有些库,比如curses,可能会有所帮助;这里有一个教程,一个阅读Lua中带有诅咒的箭头键。还有luaposix库,其中包括curses。

我有答案,如果你使用linux,这段代码就会工作。只要在其他平台上试试我的代码,看看它是否有效(如果你好奇的话)。它不会回应箭头键,也不会等到你按下回车键。

如果这会导致一些问题,请修改一些我的代码。

这可能对你的2D迷宫项目非常有用

    function getch_unix() --This return key pressed instantly without waiting until user press enter key
      os.execute("stty -echo raw")
      os.execute("stty cbreak </dev/tty >/dev/tty 2>&1")
      local key = io.read(3) --must read three letter for getArrowKey to work
      os.execute("stty -cbreak </dev/tty >/dev/tty 2>&1");
      return(key);
    end
    
    function getArrowKey()
      function split(str)
        local tmp = {}
        for let in string.gmatch(str, ".") do
          table.insert(tmp, let)
        end
        return tmp
      end
      --[[
      A is up arrow
      B is down arrow
      D is left arrow
      C is right arrow
      ]]
      local key = split(getch_unix())
      if string.lower(key[3]) == "a" then
        return "up"
      elseif string.lower(key[3]) == "b" then
        return "down"
      elseif string.lower(key[3]) == "d" then
        return "left"
      elseif string.lower(key[3]) == "c" then
        return "right"
      else
        error("Invalid arrow key!")
      end
    end

当我使用getch_unix()函数进行实验时,我得到了这种方法,我在互联网上搜索到了这个函数,它可以在没有回声的情况下获得一个按键,也不用等待你按下回车键。

编辑:我也找到了https://github.com/max1220/lua-getch它为您的用例提供了几个有用的功能更多信息,如果我的代码仍然不适合您的用例,它也会缩短您的代码

最新更新