我正在尝试制作一个用于切换按键输入的GUI,并且我已经查看了roblox维基百科和一个问题,该问题据说是我在问的内容,但是它似乎没有用。 Roblox Studio - Key Toggle for GUI
我没有代码,因为我完全不了解ContextActionService,很抱歉。
答案 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
中,有一个带有 Explorer
的 StarterPlayer
标签。您可以看到一个指向 StarterPlayer
的箭头。如果单击它,您可以看到 StarterCharacterScripts
和 StarterPlayerScripts
。如果将鼠标悬停在 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)