【问题标题】:How to prevent command key's default OS behavior using Love2d (LÖVE) or Lua如何使用 Love2d (LÖVE) 或 Lua 防止命令键的默认操作系统行为
【发布时间】:2017-01-02 14:00:03
【问题描述】:

有没有办法特别使用 Love2d (LÖVE) 或更一般地使用 Lua 来防止命令键的默认操作系统行为(即防止开始菜单打开和按下 windows 键时失去焦点)。如果我理解正确,LÖVE 使用 LuaJIT,因此如果基于 Lua 的方法不涉及未在 LuaJIT 中实现的 Lua 5.2/5.3 函数,那将很有帮助,但我可以使用适当的模块重建或在必要时填充 LÖVE 解释器。

我自己没有找到一个简单的解决方案,我目前在想我必须创建一个 Lua-C 模块。如果是这种情况,将不胜感激任何沿着这些思路的建议/链接。谢谢!

【问题讨论】:

    标签: lua love2d


    【解决方案1】:

    Lua 当然没有劫持这种操作系统关键功能的功能。这样的事情对于 Lua 来说太特定于操作系统了。而且从它的文档来看,Love2D 也没有这样的功能。

    当我们谈到这个主题时:

    防止按下 windows 键时开始菜单打开和焦点丢失

    如果您的应用程序阻止像这样的基本操作系统功能正常工作,那将是非常粗鲁。无论您的游戏有多好, 并不像用户能够做他们真正想做的事那么重要。如果用户想切换到别的东西,那是他们的权利,你不应该干涉。如果用户不小心按下了那个按钮,那是他们的责任。

    您唯一应该做的就是设置a love.focus callback,这样当应用程序失去焦点时您可以自动暂停。

    【讨论】:

    • 感谢您的回复。关于 Lua/Love2d 对这种行为的支持,我基本上得出了相同的结论。我将不得不开始阅读有关 Lua-C 模块的内容。我已经实现了当爱情窗口失去焦点时暂停的逻辑。我很欣赏并理解您关于游戏应该是否能够劫持这种行为的哲学观点。我会将其作为一个选项公开给用户,默认操作系统行为是默认值。我想创建一个界面,让我年幼的儿子可以使用而不会无意中关闭计算机(就像他以前那样,速度惊人地快)。
    • @EricLease:如果您要开始编写任意代码,请不要使用 Lua-C 模块。 Love2D 使用 LuaJIT 有几个原因。但其中最有用的是 LuaJIT 有一个 FFI 机制,允许它加载 any DLL 并直接从 Lua 代码访问它。所以你不需要学习如何编写知道它正在与 Lua 对话的代码。您只需要编写一个常规 DLL,然后让您的 LuaJIT 代码加载它。
    • 感谢您的提示。如果您不介意将其添加到您的答案中,我会将其标记为已接受。如果我成功了,我可能会发布一个答案,说明我是如何完成所需行为的,但你基本上回答了我的问题。话虽如此,我还发现了Start Killer,它将为我完成所有繁重的工作。我正在考虑将它与os.execute() 结合使用,如果它不像捕获按键并丢弃它那么简单。不过我对这种方法持谨慎态度,因为我不知道作者是如何完成它的,或者它是否安全。
    猜你喜欢
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2011-08-23
    • 2013-02-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多