【问题标题】:KeyPress event in Lua?Lua中的KeyPress事件?
【发布时间】:2011-04-16 20:57:46
【问题描述】:

是否可以让用户在 lua 上按下按键? 费。

while true do
    if keyPress(27)==true then
        print("You just pressed ESC")
    end
end

【问题讨论】:

    标签: events lua keypress


    【解决方案1】:

    Lua 以极高的可移植性为前提。因此,它本质上是基于仅提供 ANSI C 中可用的功能。 (我认为唯一的例外是动态链接,它是一种非 ANSI 功能,并非在所有平台上都可用,但非常有用,以至于他们已经将它用于许多平台。)

    ANSI C 不提供按键功能,因此默认 Lua 库也不提供。

    话虽如此,LuaRocks 存储库可能会将您带到具有此功能的库。例如,可以在 LuaRocks 页面上找到的 ltermbox 具有您需要的功能。 (请注意,您可能必须删除您不想要的部分。)可能还有其他可用的库。去挖吧。

    否则,Lua 的整个 就是可扩展性。它是一种可扩展的扩展语言。 hand-roll your own extension 提供您想要的功能实际上并不难。

    【讨论】:

      【解决方案2】:

      NTLua 项目中有一个与 getkey() 的绑定。您可以从那里获得一些资源。

      (它只是包装了 getch())

      【讨论】:

        【解决方案3】:

        您似乎正在尝试制作游戏。对于 2D 游戏,您可能需要考虑 love2d。它看起来有点奇怪,但它可以工作,并且与其他语言(如 C)相比,它相对容易。

        【讨论】:

          【解决方案4】:

          Lua 没有现货。可能还有一个额外的库。

          【讨论】:

            【解决方案5】:

            第一件事是第一件事:如果您使用我的方法来执行此操作,则需要将您使用的脚本放在 LocalScript 中。不这样做会导致键不显示在控制台中(F9 查看控制台)。

            好的,现在我们知道它在 LocalScript 中,下面是脚本:

            local player = game.Players.LocalPlayer -- Gets the LocalPlayer
            local mouse = player:GetMouse() -- Gets the player's mouse
            
            mouse.KeyDown:connect(function(key) -- Gets mouse, then gets the keyboard
                if key:lower() == "e" or key:upper() == "E" then -- Checks for selected key (key:lower = lowercase keys, key:upper = uppercase keys)
                    print('You pressed e') -- Prints the key pressed
                end -- Ends if statement
            end) -- Ends function
            

            如果您只想发信号通知一个键(仅小写或仅大写),请查看下方。

            仅小写:

            local player = game.Players.LocalPlayer
            local mouse = player:GetMouse()
            
            mouse.KeyDown:connect(function(key)
                if key == "e" then
                    print('You pressed e')
                end
            end)
            

            仅大写:

            local player = game.Players.LocalPlayer
            local mouse = player:GetMouse()
            
            mouse.KeyDown:connect(function(key)
                if key == "E" then
                    print('You pressed E')
                end
            end)
            

            或者,如果您只想发出任何键的信号,您也可以这样做:

            local player = game.Players.LocalPlayer
            local mouse = player:GetMouse()
            
            mouse.KeyDown:connect(function(key)
                print('You pressed '..key)
            end)
            

            希望我能帮助回答你的问题。

            【讨论】:

            • 这是roblox lua,不是纯lua
            猜你喜欢
            • 2017-07-08
            • 1970-01-01
            • 1970-01-01
            • 2012-11-28
            • 1970-01-01
            • 2010-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多