Roblox studio如何检测按键输入?

我正在尝试制作一个可以通过按键输入切换的GUI,我已经查看了Roblox百科和一个被认为是我所要求的问题,但是它似乎不起作用。Roblox Studio - Key Toggle for GUI

我没有代码,因为我完全不理解ContextActionService,所以很抱歉。

点赞
用户2860267
用户2860267

为了切换 GUI 开/关,你只需要一个 UIElement 的引用并设置它的 Parent 值。ContextActionService:BindAction 允许你将动作绑定到某种输入上。

这里是一个比链接问题中的例子更加明确的简单例子。

在“StarterPlayer > StarterCharacterScipts”中创建一个“LocalScript”脚本,添加以下代码:

-- 创建一个简单的GUI来展示
local targetGui = Instance.new("ScreenGui")
local label = Instance.new("TextLabel", targetGui)
label.Text = "Hello World"
label.Position = UDim2.new(0, 0, 0, 0)
label.Size = UDim2.new(0, 200, 0, 30)

-- 选择在哪里创建gui
local targetParent = game.Players.LocalPlayer.PlayerGui

-- 创建一个处理按键的函数
local function handleKeyPress(actionName, inputState, inputObj)
    -- DEBUG : 显示此按键的信息
    print("Handle Key Press")
    print("Action Name : ", actionName)
    print("Input State : ", inputState)
    print("Input Obj - KeyCode : ", inputObj.KeyCode)
    print("")

    if inputState == Enum.UserInputState.End then
        if targetGui.Parent then
            targetGui.Parent = nil
        else
            targetGui.Parent = targetParent
        end
    end
end

-- 将该功能连接到 ContextActionService
local createDedicatedButtonOnMobile = false
game.ContextActionService:BindAction("toggleGui", handleKeyPress, createDedicatedButtonOnMobile, Enum.KeyCode.R)

现在,每当你按 R 键时,它将对 GUI 元素进行父/子关联。现在你已经拥有了一个可切换的 GUI。

BindAction 是一个非常灵活的函数,所以并不只有一种方式可以完成这些任务。在这个例子中,当你按 R 键时,你会看到 handleKeyPress 多次触发。它的输出应该类似于这样:

Handle Key Press
Action Name : toggleGui
Input State : Enum.UserInputState.Begin
Input Obj - KeyCode :  Enum.KeyCode.R

Handle Key Press
Action Name : toggleGui
Input State : Enum.UserInputState.End
Input Obj - KeyCode :  Enum.KeyCode.R

这是因为按键有两种状态:按下键时和松开键时。在此示例函数中,它等待你将手指松开后执行切换操作。

希望这有所帮助,如果你仍然卡在某个地方,请让我知道。

2019-05-22 22:13:42