我想知道您是否可以像 Java、C+ 等一样接收键盘输入。或者如果没有外部库?
以下是有关 2D 迷宫游戏的一些信息:您使用箭头键在迷宫中导航。您可以使用向上和向下箭头键选择菜单中的对象,例如:
--> 新游戏
加载游戏
选项
等等......我很感激任何帮助。再会。
Lua 本身不提供任何不属于 ANSI C 的库,这是该语言广泛可移植性的一部分。
因此,您会错过键盘输入和图形等内容,以及可能被认为“简单”的操作,例如在目录中列出文件。
最有可能的是,有一个库可以满足您的需求,如果没有,请记住 Lua 是编写 C 端库的最友好的语言之一。
LOVE是一个很好的框架,它或多或少地将 Lua 的许多扩展(包括一个相当抽象的 SDL 接口)与分发方法结合在一起。如果您正在使用 Lua 开发游戏,这是一个很好的起点。
编辑:如果你在 Windows 上使用 LuaJIT 并且你对全局键挂钩没问题,那么我最近(2015 年 5 月)开发了一个库来解决这个问题:https ://github.com/LPGhatguy/global-keys
有像 curses 这样的库可能会有所帮助;这是一个教程,一是在 Lua 中阅读带有诅咒的箭头键。还有luaposix库,其中包括诅咒。
如果您使用 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() 函数进行实验时,我得到了这种方式,以获取一个按下的键,根本没有回声,也没有等待你按下 enter 按钮。
编辑:我还发现https://github.com/max1220/lua-getch它对您的用例有几个有用的功能 如果我的代码仍然不适合您的用例,请在 git 上获取更多信息,它也会缩短您的代码