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
。如果单击它,您可以看到 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)
我正在尝试制作一个可在按键输入上切换的 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
。如果单击它,您可以看到 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)