Roblox 工作室如何检测按键输入?

Roblox studio how to detect key inputs?

我正在尝试制作一个可在按键输入上切换的 GUI,并且我已经查看了 roblox 维基百科和一个据推测是我要问的问题,但它似乎不起作用。

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

为了打开和关闭 GUI,您只需要引用 UIElement 并可以设置它的 Parent 值。 ContextActionService:BindAction 只允许您将操作绑定到某种输入。

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

StarterPlayer > StarterCharacterScipts中制作一个LocalScript,添加这段代码

-- make a simple GUI to show off
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)

-- choose where to make the gui
local targetParent = game.Players.LocalPlayer.PlayerGui 

-- make a function for handling key presses
local function handleKeyPress(actionName, inputState, inputObj)
    -- DEBUG : show the information for this keypress
    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

-- connect that function to ContextActionService
local createDedicatedButtonOnMobile = false
game.ContextActionService:BindAction("toggleGui", handleKeyPress, createDedicatedButtonOnMobile, Enum.KeyCode.R)

现在,只要您按 R 键,它就会成为 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

这是因为按键有两种状态,一种是按下按键,一种是抬起按键。示例函数会监听您在执行切换之前何时抬起手指。

希望这对您有所帮助,如果您仍然遇到困难,请告诉我。

ROBLOX Studio 中,有一个 Explorer 选项卡,其中有一个 StarterPlayer。您可以看到一个箭头指向 StarterPlayer。如果单击它,您可以看到 StarterCharacterScriptsStarterPlayerScripts。如果将鼠标悬停在 StarterCharacterScripts 上,您可以在其右侧看到一个加号。如果单击它,您可以插入一个 LocalScript,它将成为 StarterCharacterScripts 的子项。如果您右键单击 LocalScript 并单击“打开”或双击脚本,它将打开 LocalScript。你的脚本应该是

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)

local targetParent = game.Players.LocalPlayer.PlayerGui 

local function handleKeyPress(actionName, inputState, inputObj)
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

local createDedicatedButtonOnMobile = false
game.ContextActionService:BindAction("toggleGui", handleKeyPress,
createDedicatedButtonOnMobile, Enum.KeyCode.R)