Input 是否有一个“问题”;“获取键盘输入”;Lua中的函数?(箭头键)

Input 是否有一个“问题”;“获取键盘输入”;Lua中的函数?(箭头键),input,lua,Input,Lua,我想知道您是否可以像Java、C+等一样接收键盘输入,或者是否没有外部库 以下是关于2D迷宫游戏的一些信息: 您可以使用箭头键在迷宫中导航。使用向上和向下箭头键选择菜单中的对象,例如: -->新游戏 负荷游戏 选择权 等等。。。谢谢你的帮助。您好。Lua本身不提供任何不属于ANSI C的库,ANSI C是该语言广泛可移植性的一部分 因此,您错过了键盘输入和图形等内容,也错过了可能被视为“简单”的操作,例如在目录中列出文件 最有可能的是,有一个库可以满足您的需要,如果没有,那么请记住Lua是编写C

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

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

-->新游戏

负荷游戏

选择权


等等。。。谢谢你的帮助。您好。

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

因此,您错过了键盘输入和图形等内容,也错过了可能被视为“简单”的操作,例如在目录中列出文件

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

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


编辑:如果你在Windows上使用LuaJIT,并且你可以使用全局键挂钩,那么我最近(2015年5月)开发了一个库来解决这个问题:

有一些像诅咒一样的库可能会有所帮助;这里有一个。还有一个包含诅咒的库。

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

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

这可能对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
function getch_unix()--此返回键立即按下,无需等待用户按enter键
操作系统执行(“stty-echo raw”)
执行(“stty cbreak/dev/tty 2>&1”)
本地键=io.read(3)--必须读取三个字母才能使getArrowKey工作
执行(“stty-cbreak/dev/tty 2>&1”);
返回(键);
结束
函数getArrowKey()
功能拆分(str)
本地tmp={}
对于let-in-string.gmatch(str,“.”)do
表.插入(tmp,let)
结束
返回tmp
结束
--[[
A是向上箭头
B是向下箭头
D是左箭头
C是右箭头
]]
本地键=拆分(getch_unix())
如果string.lower(键[3])==“a”,则
返回“向上”
elseif string.lower(键[3])==“b”然后
返回“向下”
elseif string.lower(键[3])==“d”然后
返回“左”
elseif string.lower(键[3])==“c”然后
返回“正确”
其他的
错误(“无效的箭头键!”)
结束
结束
当我使用getch_unix()函数进行测试时,我得到了这种方法。我在internet上找到了这个函数,它可以在不回声的情况下搜索一个按下的键,并且不等待您按下enter按钮

编辑
Im还发现它有几个有用的功能,可用于您的用例。更多信息,请访问git。如果我的代码仍然不适合您的用例,它也会缩短您的代码。

io.read()
。像这样使用
b=io.read()。。。我去看看爱情。