Roblox Studio如何检测关键输入?

时间:2019-04-27 14:01:16

标签: lua roblox

我正在尝试制作一个用于切换按键输入的GUI,并且我已经查看了roblox维基百科和一个问题,该问题据说是我在问的内容,但是它似乎没有用。 Roblox Studio - Key Toggle for GUI

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

2 个答案:

答案 0 :(得分:0)

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

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

LocalScript中创建一个StarterPlayer > StarterCharacterScipts,添加此代码

-- 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

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

希望这会有所帮助,如果您仍然遇到问题,请告诉我。

答案 1 :(得分:0)

ROBLOX Studio 中,有一个带有 ExplorerStarterPlayer 标签。您可以看到一个指向 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)