我想知道你是否可以像Java,C +等那样接收键盘输入。或者如果没有外部库?
以下是关于2D迷宫游戏的一些信息: 您可以使用箭头键浏览迷宫。使用向上和向下箭头键选择菜单中的对象,例如:
- >新游戏
加载游戏
选项
依此类推......我感谢任何帮助。美好的一天。
答案 0 :(得分:4)
Lua本身并不提供任何不属于ANSI C的库,这是该语言广泛可移植性的一部分。
因此,您会错过键盘输入和图形等操作,也会错过可能被视为“简单”的操作,例如列出目录中的文件。
最有可能的是,有一个库可以满足您的需求,如果没有,那么请记住,Lua是最友好的编写C端库的语言之一。
LOVE是一个很好的框架,它或多或少地使用分发方法将相当多的扩展(包括一个相当抽象的SDL接口)耦合到Lua。如果您正在使用Lua开发游戏,这是一个很好的起点。
编辑:如果您使用LuaJIT在Windows上,并且您可以使用全局密钥钩子,那么我最近(2015年5月)开发了一个解决该问题的库:https://github.com/LPGhatguy/global-keys
答案 1 :(得分:2)
像诅咒这样的图书馆可能有所帮助;这是一个tutorial one reading arrow keys with curses in Lua。还有luaposix库,其中包括curses。
答案 2 :(得分:0)
如果您使用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
当我使用在互联网搜索中找到的getch_unix()函数进行实验以得到一个被按下的键而根本没有回声并且不等您按enter键时,我就会采用这种方式。
编辑: 我还发现https://github.com/max1220/lua-getch对于您的用例有几个有用的功能,如果我的代码仍然不适合您的用例,它会在git上提供更多信息,这也会缩短您的代码