GuiObject 是一個抽象類 (非常像 BasePart ) 對 2D 用戶界面對物件。它定義
要特殊方式操作GUI對象的布局,您可以使用清單/伸展或網格,並且通過外觀模組來更改它們。
雖然您可以使用 InputBegan 和 InputEnded 來檢測任何 GUI 對象上的滑鼠按鈕事件,但只有 ImageButton 和 1>
概要
屬性
決定這個輸入是否會沉沒在此 UI 元素。
對 GuiObject 的起始點,相對於其絕對大小。
決定是否會在基於兒童內容的重新縮放。
決定 GuiObject 背景顏色。
決定 GuiObject 背景和邊框的透明度。
決定 GuiObject 邊框的顏色。
決定GuiObject邊框的大小與邊框相對位置。
決定 GuiObject 邊框的像素寬度。
決定是否在超級父元素 GUI 元素外會成像子元素 GuiObjects。
決定玩家的滑鼠是否正在按在 GuiObject 上或不是。
決定 GuiButton 是否可以與或不與互動,或是否要檢查 GuiState 的 GuiObject 是否正在變更或不變更。
使用 GuiObject 時,控制 UIGridStyleLayout 的排序順序。
設定 GuiObject 將在遊戲控制器選擇器向下移動時選擇。
設定 GuiObject ,當遊戲控制器選擇器移動到左邊時會選擇。
設置 GuiObject 將在遊戲控制器選擇器移動到右邊時選擇。
設定 GuiObject 將在遊戲控制器選手柄上移動時選擇。
決定 GuiObject 的像素和矢量位置。
確定 GuiObject 旋轉的程度。
確認遊戲控制器可以選擇 GUI 嗎。
覆蓋遊戲手柄的預設裝飾。
遊戲控制器選擇 GuiObjects 的程序順序。
決定 GuiObject 的像素和浮點大小。
Class.GuiObject.BackgroundTransparency|BackgroundTransparency 和 TextTransparency 的混合屬性。
決定是否要渲染 GuiObject 和它的子孫。
決定 GuiObject 與其他人相對的排名。
描述介面元素的實際屏幕位置,以幣晃。
描述 UI 元素的實際螢幕旋轉度。
描述 UI 元素的實際屏幕尺寸,以幣晃。
設為真的時,本地化將適用於此 GuiBase2d 和它的後代。
一個引用 LocalizationTable 以應用自動本地化到這個 GuiBase2d 和它的後代。
在下向方向中自訂遊戲控制器選擇行為。
在左向方向中自訂遊戲控制器選擇行為。
自訂遊戲控制器選擇行為。
在上方向中自訂遊戲控制器選擇行為。
允許自訂遊戲控制器選擇動作。
方法
- TweenPosition(endPosition : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : bool,callback : function):bool
順滑地將一個 GUI 移至新的 UDim2 。
- TweenSize(endSize : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : bool,callback : function):bool
順滑地將 GUI 重新調整為新的 UDim2。
- TweenSizeAndPosition(endSize : UDim2,endPosition : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : bool,callback : function):bool
順滑地將一個 GUI 移動到新的尺寸和位置。
活動
發生時間發生時,使用者開始使用人機交互裝置 (滑鼠按鈕, 觸摸開始, 鍵盤按鈕等等)。
使用者改變人機交互裝置 (滑鼠按鈕、觸摸開始、鍵盤按鈕等) 時發生時間。
發生時間當使用者停止使用人類電腦介面裝置 (滑鼠按鈕關閉, 觸摸開始, 鍵盤按鈕下等) 時。
使用者移動滑鼠到 GUI 元素時會發生火焰。
發射一個使用者從 GUI 元素移動滑鼠時。
在使用者移動鼠標時,發射 GUI 元素內的任何時間。
發射時,使用者將鼠標輪向返回,當滑鼠位於一個 GUI 元素上。
發射時,使用者將鼠標輪向前移動,當滑鼠位於 GUI 元素上。
發射時 GuiObject 與遊戲控制器選擇器專注。
發射時Gamepad選擇器停止專注在GUI對象上。
玩家開始時、繼續和停止按長按 UI 元素。
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState):RBXScriptSignal
玩家移動指針時發射。
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState):RBXScriptSignal
發射時玩家使用兩個手指在 UI 元素上執行點擊或拉動動作時。
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState):RBXScriptSignal
發生時玩家使用兩個手指在 UI 元素上執行旋轉動作時。
發射玩家在介面元素上執行擺動手勢時。
發射玩家在介面元素上執行點擊動作時。
- SelectionChanged(amISelected : bool,previousSelection : GuiObject,newSelection : GuiObject):RBXScriptSignal
發射在遊戲控制器選擇移動到,離開,或變更連接的 GuiBase2d 或任何子選項 GuiObjects。
屬性
Active
此屬性決定此 GuiObject 會否將輸入變成 3D 空間,例如基礎模型具有 ClickDetector 類型,如 DragDetector 。在其他話來說,如果玩家嘗試用滑鼠點擊啟動的 UI 元素,則 UI 將阻止輸入從達到滑鼠狀態到達偵測器
對於 Class.GuiButton 對象 ( Class.ImageButton 和 Class.TextButton )
範例程式碼
-- Place this LocalScript within a TextButton (or ImageButton)
local textButton = script.Parent
textButton.Text = "Click me"
textButton.Active = true
local function onActivated()
-- This acts like a debounce
textButton.Active = false
-- Count backwards from 5
for i = 5, 1, -1 do
textButton.Text = "Time: " .. i
task.wait(1)
end
textButton.Text = "Click me"
textButton.Active = true
end
textButton.Activated:Connect(onActivated)
AnchorPoint
AnchorPoint 屬性決定了 GuiObject 的起始點,相對於其絕對大小。起始點由 GuiObject.Position 決定,從哪裡位置元素 (通過 1>Class.GuiObject.Size1> 的擴展) 。
請在 這裡 查看裝飾圖和說明。
範例程式碼
local guiObject = script.Parent
while true do
-- Top-left
guiObject.AnchorPoint = Vector2.new(0, 0)
guiObject.Position = UDim2.new(0, 0, 0, 0)
task.wait(1)
-- Top
guiObject.AnchorPoint = Vector2.new(0.5, 0)
guiObject.Position = UDim2.new(0.5, 0, 0, 0)
task.wait(1)
-- Top-right
guiObject.AnchorPoint = Vector2.new(1, 0)
guiObject.Position = UDim2.new(1, 0, 0, 0)
task.wait(1)
-- Left
guiObject.AnchorPoint = Vector2.new(0, 0.5)
guiObject.Position = UDim2.new(0, 0, 0.5, 0)
task.wait(1)
-- Dead center
guiObject.AnchorPoint = Vector2.new(0.5, 0.5)
guiObject.Position = UDim2.new(0.5, 0, 0.5, 0)
task.wait(1)
-- Right
guiObject.AnchorPoint = Vector2.new(1, 0.5)
guiObject.Position = UDim2.new(1, 0, 0.5, 0)
task.wait(1)
-- Bottom-left
guiObject.AnchorPoint = Vector2.new(0, 1)
guiObject.Position = UDim2.new(0, 0, 1, 0)
task.wait(1)
-- Bottom
guiObject.AnchorPoint = Vector2.new(0.5, 1)
guiObject.Position = UDim2.new(0.5, 0, 1, 0)
task.wait(1)
-- Bottom-right
guiObject.AnchorPoint = Vector2.new(1, 1)
guiObject.Position = UDim2.new(1, 0, 1, 0)
task.wait(1)
end
AutomaticSize
此屬性用於自動調整子孫的大小來自動尺寸父親的 UI 對象。 您可以使用此屬性來在編輯或執行時添加文字和其他內容到 UI 對象,大小將自動調整,以適應此內容。
當 AutomaticSize 設為 Enum.AutomaticSize 值,而不是 None,這個 UI 對象可能會因子內容而重新尺寸。
有關這個屬性的使用方法和工作方式,請參閱 這裡。
範例程式碼
-- Array of text labels/fonts/sizes to output
local labelArray = {
{ text = "Lorem", font = Enum.Font.Creepster, size = 50 },
{ text = "ipsum", font = Enum.Font.IndieFlower, size = 35 },
{ text = "dolor", font = Enum.Font.Antique, size = 55 },
{ text = "sit", font = Enum.Font.SpecialElite, size = 65 },
{ text = "amet", font = Enum.Font.FredokaOne, size = 40 },
}
-- Create an automatically-sized parent frame
local parentFrame = Instance.new("Frame")
parentFrame.AutomaticSize = Enum.AutomaticSize.XY
parentFrame.BackgroundColor3 = Color3.fromRGB(90, 90, 90)
parentFrame.Size = UDim2.fromOffset(25, 100)
parentFrame.Position = UDim2.fromScale(0.1, 0.1)
parentFrame.Parent = script.Parent
-- Add a list layout
local listLayout = Instance.new("UIListLayout")
listLayout.Padding = UDim.new(0, 5)
listLayout.Parent = parentFrame
-- Set rounded corners and padding for visual aesthetics
local roundedCornerParent = Instance.new("UICorner")
roundedCornerParent.Parent = parentFrame
local uiPaddingParent = Instance.new("UIPadding")
uiPaddingParent.PaddingTop = UDim.new(0, 5)
uiPaddingParent.PaddingLeft = UDim.new(0, 5)
uiPaddingParent.PaddingRight = UDim.new(0, 5)
uiPaddingParent.PaddingBottom = UDim.new(0, 5)
uiPaddingParent.Parent = parentFrame
for i = 1, #labelArray do
-- Create an automatically-sized text label from array
local childLabel = Instance.new("TextLabel")
childLabel.AutomaticSize = Enum.AutomaticSize.XY
childLabel.Size = UDim2.fromOffset(75, 15)
childLabel.Text = labelArray[i]["text"]
childLabel.Font = labelArray[i]["font"]
childLabel.TextSize = labelArray[i]["size"]
childLabel.TextColor3 = Color3.new(1, 1, 1)
childLabel.Parent = parentFrame
-- Visual aesthetics
local roundedCorner = Instance.new("UICorner")
roundedCorner.Parent = childLabel
local uiPadding = Instance.new("UIPadding")
uiPadding.PaddingTop = UDim.new(0, 5)
uiPadding.PaddingLeft = UDim.new(0, 5)
uiPadding.PaddingRight = UDim.new(0, 5)
uiPadding.PaddingBottom = UDim.new(0, 5)
uiPadding.Parent = childLabel
task.wait(2)
end
BackgroundColor3
這個屬性決定背景GuiObject的顏色 (填充顏色)。如果您的元素包含文字,例如TextBox、TextButton或1>Class.TextLabel1>,請確認背景顏色與文字顏色相反。
另一個決定背景視覺屬性的重要參數是 GuiObject.BackgroundTransparency ;如果此參數設為 1 ,背景或邊框都不會成像。
也參閱 BorderColor3 。
範例程式碼
-- Put this code in a LocalScript in a Frame
local frame = script.Parent
while true do
for hue = 0, 255, 4 do
-- HSV = hue, saturation, value
-- If we loop from 0 to 1 repeatedly, we get a rainbow!
frame.BorderColor3 = Color3.fromHSV(hue / 256, 1, 1)
frame.BackgroundColor3 = Color3.fromHSV(hue / 256, 0.5, 0.8)
task.wait()
end
end
BackgroundTransparency
此屬性確定 GuiObject 背景和邊框的透明度。它不會, however, 決定 GUI 是 TextBox、TextButton 或 2>Class.Text
如果此屬性設為 1 ,背景或邊框都不會渲染,而且GUI 背景將完全透明。
BorderColor3
決定 GuiObject 長方形邊框的顏色 (也稱為線條顏色)。這與對物件的 GuiObject.BackgroundColor3 屬性無關。如果 GuiObject.BorderSizePixel 屬性設為 1> 01> ,您將無法看到對物件的邊框。
注意,UIStroke 零件可以啟用更先進的邊框效果。
範例程式碼
-- Put me inside some GuiObject, preferrably an ImageButton/TextButton
local button = script.Parent
local function onEnter()
button.BorderSizePixel = 2
button.BorderColor3 = Color3.new(1, 1, 0) -- Yellow
end
local function onLeave()
button.BorderSizePixel = 1
button.BorderColor3 = Color3.new(0, 0, 0) -- Black
end
-- Connect events
button.MouseEnter:Connect(onEnter)
button.MouseLeave:Connect(onLeave)
-- Our default state is "not hovered"
onLeave()
BorderMode
這個屬性決定在什麼方式GuiObject 邊框放置在其尺寸相對於其尺寸使用相同名稱的枚Enum.BorderMode。
注意,UIStroke 可以覆蓋此屬性,允許進一步的邊框效果。
BorderSizePixel
此屬性決定 GuiObject 邊框在畫素的寬度上渲染。將此設置為 0 將邊框完全關閉。
注意,UIStroke 可以覆蓋此屬性,允許進一步的邊框效果。
範例程式碼
-- Put me inside some GuiObject, preferrably an ImageButton/TextButton
local button = script.Parent
local function onEnter()
button.BorderSizePixel = 2
button.BorderColor3 = Color3.new(1, 1, 0) -- Yellow
end
local function onLeave()
button.BorderSizePixel = 1
button.BorderColor3 = Color3.new(0, 0, 0) -- Black
end
-- Connect events
button.MouseEnter:Connect(onEnter)
button.MouseLeave:Connect(onLeave)
-- Our default state is "not hovered"
onLeave()
ClipsDescendants
此屬性決定 whether the GuiObject 會否剪輯 (使其隱形) 任何輻射 GUI 元素,以外的區域。
注意,GuiObject.Rotation 不支援此屬性。如果此或任何祖先 GUI 具有 非零 GuiObject.Rotation,此屬性將被忽略,並且因此屬性的值而渲染任何後繼 GUI 元素。
Interactable
決定 GuiButton 是否可以與或不與互動,或是否要檢查 GuiState 的 GuiObject 是否正在變更或不變更。
在 GuiButton 上:
- 當 Interactable 設定在 GuiButton 上時,true 會再次設定為 1> Class.GuiButton1> ,4> Class.GuiObject.GuiState|GuiState4> 將再次設置正常。
在 GuiObject 上:
LayoutOrder
此屬性控制使用 GuiObject (例如 UIGridStyleLayout 或 UIListLayout ) 使用 2>Class.UIGridStyleLayout.SortOrder|SortOrder2> 設置時的排序順序
GuiObjects 按照上升的順序排序,其中最低的值佔優先權。對於擁有相同值的對象,將會回到原來的順序。
如果您不確定在未來是否需要在兩個現有元素之間添加元素,那麼您應該使用 100 (0 、100 、1> 2001> 等)的多重值來指定位置。這樣可以確保在其他元素之間的大範�
也參閱 ZIndex,以確定對物件的 渲染 順序而不是排序順序。
NextSelectionDown
這個屬性設定 GuiObject 選擇器在使用者移動遊戲控制器向下移動時會選擇。如果此屬性為空,將遊戲控制器向下移動不會變更選擇的 GUI。
將遊戲控制器選擇器向下移動設定 GuiService.SelectedObject 到此對象,除非 GUI 不是 Selectable 。注意,此屬性可以設置在 GUI 元素,即使它不是 Selectable 。因此,
也參閱 NextSelectionUp 、 NextSelectionLeft 和 NextSelectionRight 。
範例程式碼
-- Setup the Gamepad selection grid using the code below
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Left edge
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Right edge
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Above
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Below
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Test the Gamepad selection grid using the code below
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
NextSelectionLeft
此屬性設定 GuiObject 選擇器移動到左邊,當使用者移動游戲手柄選擇器到左邊時。如果此屬性是空的,移動游戲手柄到左邊不會改變選擇的 GUI。
將遊戲控制器選擇器移動到左側設定 GuiService.SelectedObject 到此對象,除非 GUI 不是 Selectable 。注意,此屬性可以設置在 GUI 元素即使它不是 Selectable 。因此,您應該確
也參閱 NextSelectionUp 、 NextSelectionDown 和 NextSelectionRight 。
範例程式碼
-- Setup the Gamepad selection grid using the code below
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Left edge
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Right edge
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Above
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Below
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Test the Gamepad selection grid using the code below
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
NextSelectionRight
此屬性設定 GuiObject 選擇時,使用者將游戲控制器選擇器移動到右邊。如果此屬性是空的,將游戲控制器移動到右邊也不會變更選擇的 GUI。
將遊戲控制器選擇器移動到右邊設定 GuiService.SelectedObject 到此對象,除非 GUI 為 Selectable 。注意,此屬性可以設置在 GUI 元素即使它不是 Selectable 。
也參閱 NextSelectionUp 、 NextSelectionDown 和 NextSelectionLeft 。
範例程式碼
-- Setup the Gamepad selection grid using the code below
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Left edge
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Right edge
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Above
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Below
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Test the Gamepad selection grid using the code below
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
NextSelectionUp
此屬性設定 GuiObject 選擇時,使用者將游戲控制器向上移動時選擇。如果此屬性為空,將游戲控制器向上移動不會變更選擇的 GUI。
將遊戲控制器選擇器向上移動設定 GuiService.SelectedObject 到此對象,除非 GUI 不是 Selectable 。注意,此屬性可以設置在 GUI 元素,即使它不是 Selectable 。因此,您
也 see also NextSelectionDown , NextSelectionLeft , NextSelectionRight .
範例程式碼
-- Setup the Gamepad selection grid using the code below
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Left edge
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Right edge
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Above
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Below
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Test the Gamepad selection grid using the code below
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
Position
此屬性將 GuiObject 像素和截止位置使用 UDim2 。位置位於 GuiObject.AnchorPoint 的對物件。
截止位置是指將來自父親 GUI 元素的大小,如果有。
Datatype.UDim2 的像素零件無論是否為父級GUI的大小相同。這些值代表對象在像素中的位置。對物件的實際像素位置可以從 GuiBase2d.AbsolutePosition 屬性閱取。
Rotation
此屬性確定旋轉 GuiObject 的度數。旋轉是相對於對物件中心的 中心 的,而不是 不 是 1> Class.GuiObject.AnchorPoint|AnchorPoint1> ,意味著您無法變更旋轉點。此外,此屬性與 <
Selectable
此屬性確定 GuiObject 可以在使用遊戲控制器時是否可以選擇。
如果此屬性是真的,可以選擇一個 GUI。選擇一個 GUI 也會設置 GuiService.SelectedObject 屬性到該物件。
當此為 false 時,無法選擇使用者介面。但將此設為 false 時,如果選擇了一個使用者介面,則不會選擇它,也不會變更 GuiService.SelectedObject 屬性的值。
添加 GuiObject.SelectionGained 和 GuiObject.SelectionLost 將對元素不會發射。若要選擇一個 GuiObject,您必須變更 GuiService.SelectedObject 屬性。
這個屬性有助於在多個 GUI 通過屬性如此 GuiObject.NextSelectionUp , GuiObject.NextSelectionDown , Class.GuiObj|NextSelectionRight</
範例程式碼
local GuiService = game:GetService("GuiService")
local textBox = script.Parent
local function gainFocus()
textBox.Selectable = true
GuiService.SelectedObject = textBox
end
local function loseFocus(_enterPressed, _inputObject)
GuiService.SelectedObject = nil
textBox.Selectable = false
end
-- The FocusLost and FocusGained event will fire because the textBox
-- is of type TextBox
textBox.Focused:Connect(gainFocus)
textBox.FocusLost:Connect(loseFocus)
SelectionImageObject
這個屬性會覆蓋遊戲手柄的預設裝飾。
注意,選擇的 SelectionImageObject 會覆蓋選取的 GuiObject 以 Size 的圖像。為了獲得最佳結果,您應該將自訂 1> SelectionImageObject1> 尺寸為 4> Datatype.UDim2
將 SelectionImageObject 變更為 GuiObject 元素只會影響該元素。要影響所有用戶的 GUI 元素,請設置 PlayerGui.SelectionImageObject 屬性。
要確定或設置哪一個使用者選擇的 GUI 元素,您可以使用 GuiService.SelectedObject 屬性。玩家使用遊戲手柄選擇不同的 GUI 元素,並且使用 Class.Gui
Size
此屬性使用 GuiObject 決定 UDim2 的乘數和畫素尺寸。
指數尺寸與任何親級GUI元素的大小相對,如有。
Datatype.UDim2 的像素零件無論是否為父級GUI的大小相同。這些值代表對象的像素大小。對物件的實際像素大小可以從GuiBase2d.AbsoluteSize 屬性閱取。
如果 GuiObject 有父父元素,其在各軸上的大小也會受到父元素親的 SizeConstraint 的影響。
範例程式碼
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Paste script into a LocalScript that is
-- parented to a Frame within a Frame
local frame = script.Parent
local container = frame.Parent
container.BackgroundColor3 = Color3.new(0, 0, 0) -- black
-- This function is called when the humanoid's health changes
local function onHealthChanged()
local human = player.Character.Humanoid
local percent = human.Health / human.MaxHealth
-- Change the size of the inner bar
frame.Size = UDim2.new(percent, 0, 1, 0)
-- Change the color of the health bar
if percent < 0.1 then
frame.BackgroundColor3 = Color3.new(1, 0, 0) -- black
elseif percent < 0.4 then
frame.BackgroundColor3 = Color3.new(1, 1, 0) -- yellow
else
frame.BackgroundColor3 = Color3.new(0, 1, 0) -- green
end
end
-- This function runs is called the player spawns in
local function onCharacterAdded(character)
local human = character:WaitForChild("Humanoid")
-- Pattern: update once now, then any time the health changes
human.HealthChanged:Connect(onHealthChanged)
onHealthChanged()
end
-- Connect our spawn listener; call it if already spawned
player.CharacterAdded:Connect(onCharacterAdded)
if player.Character then
onCharacterAdded(player.Character)
end
Visible
此屬性將包括 GuiObject 和它的子孫。
Class.GuiObject 的個別零件可以通過透明度屬性來個別控制GuiObject.BackgroundTransparency 、TextLabel.TextTransparency 和 1>Class.ImageLabel.ImageTransparency1> 。
當此屬性為 false 時,GuiObject 將被擁有由 UIListLayout 、1> Class.UIGridLayout1> 和 4> Class.UITableLayout4> 等結構來忽略。 在其他 words,空間將被其他元素使用。
範例程式碼
local gui = script.Parent
local window = gui:WaitForChild("Window")
local toggleButton = gui:WaitForChild("ToggleWindow")
local closeButton = window:WaitForChild("Close")
local function toggleWindowVisbility()
-- Flip a boolean using the `not` keyword
window.Visible = not window.Visible
end
toggleButton.Activated:Connect(toggleWindowVisbility)
closeButton.Activated:Connect(toggleWindowVisbility)
ZIndex
這個屬性決定 GuiObject 與其他人相對於哪個程序才會渲染。
由預設情況下,GuiObjects 以上僅需要在秩序排序的優先權順序中渲染,其中值最低的 ZIndex 值在上方的人會被顯示。您可以在 ScreenGui
如果您不確定在未來需要在兩個現有元素之間添加元素,是否需要使用多個 100 (0 ,100 ,1> 2001> ,等等) 來確保磚塊在其他元素之間的渲染順序值。這確保您可以使用多個值
也參閱 LayoutOrder ,這會控制 排序 順序的 GuiObject 使用與布局結構,例如 1> Class.UIListLayout1> 或 4> Class.UIGridLayout4> 。
方法
TweenPosition
使用指定的 UDim2 位置將 GUI 移動到新位置,並在指定的時間內使用 Enum.EasingDirection 和 Enum.EasingStyle 來寫入新位置。
此函數將返回減速器是否播玩 遊玩。如果另一個減速器正在 GuiObject 上,則不會播放。
也看:
- GuiObject:TweenSize() , tweens 一個 GUI 的尺寸
- GuiObject:TweenSizeAndPosition(),會同步傳送控制台的大小和位置
參數
GUI 應該放置在哪裡。
將 GUI 調整到 endPosition 的方向。
用於將 GUI 調整至 endPosition 的風格。
幾秒鐘的時間,在秒単位的時間,晃動的時間。
擾動器會否覆蓋在進行中的擾動器。
當 твин完成時執行的回潮函數。
返回
是否玩 遊玩放擺動。
範例程式碼
local START_POSITION = UDim2.new(0, 0, 0, 0)
local GOAL_POSITION = UDim2.new(1, 0, 1, 0)
local guiObject = script.Parent
local function callback(state)
if state == Enum.TweenStatus.Completed then
print("The tween completed uninterrupted")
elseif state == Enum.TweenStatus.Canceled then
print("Another tween cancelled this one")
end
end
-- Initialize the GuiObject position, then start the tween:
guiObject.Position = START_POSITION
local willPlay = guiObject:TweenPosition(
GOAL_POSITION, -- Final position the tween should reach
Enum.EasingDirection.In, -- Direction of the easing
Enum.EasingStyle.Sine, -- Kind of easing to apply
2, -- Duration of the tween in seconds
true, -- Whether in-progress tweens are interrupted
callback -- Function to be callled when on completion/cancelation
)
if willPlay then
print("The tween will play")
else
print("The tween will not play")
end
TweenSize
使用指定的 UDim2 在指定的時間內將 GUI 重新尺寸為新的 Enum.EasingDirection 。
此函數將返回減速器是否播玩 遊玩。 通常此將永遠返回 true,但如果另一個減速器啟用,則將返回 false。
也看:
- GuiObject:TweenPosition() , 把 tweens 放在 GUI 的位置
- GuiObject:TweenSizeAndPosition(),會同步傳送控制台的大小和位置
參數
GUI 的尺寸應該重新調整。
將 GUI 調整到 endSize 的方向。
用於將 GUI 調整至 endSize 的風格。
幾秒鐘的時間,在秒単位的時間,晃動的時間。
擾動器會否覆蓋在進行中的擾動器。
當 твин完成時執行的回潮函數。
返回
是否玩 遊玩放擺動。
範例程式碼
local guiObject = script.Parent
local function callback(didComplete)
if didComplete then
print("The tween completed successfully")
else
print("The tween was cancelled")
end
end
local willTween = guiObject:TweenSize(
UDim2.new(0.5, 0, 0.5, 0), -- endSize (required)
Enum.EasingDirection.In, -- easingDirection (default Out)
Enum.EasingStyle.Sine, -- easingStyle (default Quad)
2, -- time (default: 1)
true, -- should this tween override ones in-progress? (default: false)
callback -- a function to call when the tween completes (default: nil)
)
if willTween then
print("The GuiObject will tween")
else
print("The GuiObject will not tween")
end
TweenSizeAndPosition
使用指定的 UDim2 尺寸和位置將 GUI 重新調整為新的尺寸和位置,並使用指定的 Enum.EasingDirection 和 Enum.EasingStyle 來儲存資料。
此函數將返回減速器是否播玩 遊玩。 通常此將永遠返回 true,但如果另一個減速器啟用,則將返回 false。
也看:
- GuiObject:TweenSize() , tweens 一個 GUI 的尺寸
- GuiObject:TweenPosition() , 把 tweens 放在 GUI 的位置
參數
GUI 的尺寸應該重新調整。
GUI 應該放置在哪裡。
將 GUI 調整到 endSize 和 endPosition 的方向。
用於調整 GUI 大小和位置的造型。
幾秒鐘的時間,在秒単位的時間,晃動的時間。
擾動器會否覆蓋在進行中的擾動器。
當 твин完成時執行的回潮函數。
返回
是否玩 遊玩放擺動。
範例程式碼
local frame = script.Parent.Frame
frame:TweenSizeAndPosition(UDim2.new(0, 0, 0, 0), UDim2.new(0, 0, 0, 0))
活動
InputBegan
這個事件會在使用 GuiObject 通過人類電腦介面裝置(滑鼠按鈕、觸摸開始、鍵盤按鈕、等等)開始互動時發生。
Class.UserInputService 有一個名為 UserInputService.InputBegan 的事件,這是不是專用於特定 UI 元素的:
這個事件將在遊戲狀態下發生。
也看:
參數
Class.InputObject ,包含有用的資料以便查詢用戶輸入的有用資料,例如 type of input 、 state of input 和 1>Class.InputObj.Position|屏幕坐標1> 。
範例程式碼
-- In order to use the InputBegan event, you must specify the GuiObject
local gui = script.Parent
-- A sample function providing multiple usage cases for various types of user input
local function inputBegan(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
end
gui.InputBegan:Connect(inputBegan)
InputChanged
這個事件會在使用者改變人機介面裝置 (滑鼠按鈕, 觸摸開始, 鍵盤按鈕, 等等) 時發生。
Class.UserInputService 有一個名為 UserInputService.InputChanged 的事件,這不是限制於特定 UI 元素的:
這個事件將在遊戲狀態下發生。
也看:
參數
Class.InputObject ,包含有用的資料以便查詢用戶輸入的有用資料,例如 type of input 、 state of input 和 1>Class.InputObj.Position|屏幕坐標1> 。
範例程式碼
local UserInputService = game:GetService("UserInputService")
local gui = script.Parent
local function printMovement(input)
print("Position:", input.Position)
print("Movement Delta:", input.Delta)
end
local function inputChanged(input)
if input.UserInputType == Enum.UserInputType.MouseMovement then
print("The mouse has been moved!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
print("The mouse wheel has been scrolled!")
print("Wheel Movement:", input.Position.Z)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.Thumbstick1 then
print("The left thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then
print("The right thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.ButtonL2 then
print("The pressure being applied to the left trigger has changed!")
print("Pressure:", input.Position.Z)
elseif input.KeyCode == Enum.KeyCode.ButtonR2 then
print("The pressure being applied to the right trigger has changed!")
print("Pressure:", input.Position.Z)
end
elseif input.UserInputType == Enum.UserInputType.Touch then
print("The user's finger is moving on the screen!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.Gyro then
local _rotInput, rotCFrame = UserInputService:GetDeviceRotation()
local rotX, rotY, rotZ = rotCFrame:toEulerAnglesXYZ()
local rot = Vector3.new(math.deg(rotX), math.deg(rotY), math.deg(rotZ))
print("The rotation of the user's mobile device has been changed!")
print("Position", rotCFrame.p)
print("Rotation:", rot)
elseif input.UserInputType == Enum.UserInputType.Accelerometer then
print("The acceleration of the user's mobile device has been changed!")
printMovement(input)
end
end
gui.InputChanged:Connect(inputChanged)
InputEnded
輸入結束事件發生,當使用者停止使用人機交互裝置 (滑鼠按鈕關閉、觸摸開始、鍵盤按鈕關閉等) 時。
Class.UserInputService 有一個名為 UserInputService.InputEnded 的事件,這不是限制於特定 UI 元素:
這個事件將在遊戲狀態下發生。
也看:
參數
Class.InputObject ,包含有用的資料以便查詢用戶輸入的有用資料,例如 type of input 、 state of input 和 1>Class.InputObj.Position|屏幕坐標1> 。
範例程式碼
-- In order to use the InputChanged event, you must specify a GuiObject
local gui = script.Parent
-- A sample function providing multiple usage cases for various types of user input
local function inputEnded(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key has been released! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button has been released on a gamepad! Button:", input.KeyCode)
end
end
gui.InputEnded:Connect(inputEnded)
MouseEnter
滑鼠輸入事件會發生,當使用者將滑鼠移動到 GUI
請不要依賴此事件傳送的 x 和 y 參數作為一種笨蛋方式來確定用戶在 GUI 中的滑鼠位置。這些坐標可能會在滑鼠從同一邊入入 GUI 時發生錯誤。這是因為坐標會指示滑鼠位置而不是正確的時間,例如當滑
這個事件會在 GUI 元素在另一個元素下重新渲染時發生。
如果您想跟蹤用戶的滑鼠離開 GUI 元素的時間,您可以使用 GuiObject.MouseLeave 事件。
也看:
參數
範例程式碼
local guiObject = script.Parent
guiObject.MouseEnter:Connect(function(x, y)
print("The user's mouse cursor has entered the GuiObject at position", x, ",", y)
end)
MouseLeave
滑鼠離開事件發生,當使用者將滑鼠從 GUI 元素移動。
請不要依賴這個事件傳送的 x 和 y 參數作為一個傻瓜方法來確定用戶的滑鼠在離開 GUI 時的位置。這些坐標可能會在滑鼠離開 GUI 時以相同的邊緣傳送,特別是當滑鼠離開 GUI 時快速離開時。這是
這個事件會在 GUI 元素在另一個元素下重新渲染時發生。
也看:
參數
MouseMoved
發射任何使用者移動鼠標時,它在 Class.GuiObject|GUI 元素內。與 Class.Mouse.Move 相似,無論使用者的鼠標是否在 GUI 元素上。
注意,這個事件會在滑鼠的位置更新時發生,因此在移動時會一直重複發生。
x 和 y 參數指示用戶鼠標在像素的更新屏幕坐標。這些可以有助於確定在 GUI、屏幕和 Delta 中滑鼠的位置,因為滑鼠的上一個位置如果被跟蹤在全球變數中,則可能會導致滑鼠的位置在變數中。
下面的代碼顯示了如何測量用戶鼠標對 GUI 元素的相對位置:
local CustomScrollingFrame = script.Parent
local SubFrame = CustomScrollingFrame:FindFirstChild("SubFrame")
local mouse = game.Players.LocalPlayer:GetMouse()
function getPosition(X, Y)
local gui_X = CustomScrollingFrame.AbsolutePosition.X
local gui_Y = CustomScrollingFrame.AbsolutePosition.Y
local pos = Vector2.new(math.abs(X - gui_X), math.abs(Y - gui_Y - 36))
print(pos)
end
CustomScrollingFrame.MouseMoved:Connect(getPosition)
注意,這個事件可能不會正確發射,當使用者的鼠標進入或退出 GUI 元素。因此,x 和 y 參數可能不完全匹配到 GUI 邊緣的坐標。
也看:
參數
MouseWheelBackward
輪子倒退事件發生,當使用者將鼠標輪子捲回 GUI 元素時,它與 Mouse.WheelBackward 類似,無論使用者的鼠標是否在 GUI 元素上。
此事件只是作為輪子向後運動的指標發動。這意味著 x 和 y 鼠標坐標參數不會因此事件而改變。這些坐標只會在鼠標移動時變更,這可以由 GuiObject.MouseMoved 事件追蹤。
也看:
參數
MouseWheelForward
輪子前進事件發生,當使用者將鼠標輪向前移動,當滑鼠位於 GUI 元素上。這與 Mouse.WheelForward 相似,無論使用者的鼠標位於 GUI 元素上。
此事件只是作為輪子前進運動的指標發射。這意味著 x 和 y 鼠標坐標參數不會因此事件而改變。這些坐標只會在鼠標移動時變更,這可以由 GuiObject.MouseMoved 事件追蹤。
也看:
參數
SelectionGained
此事件發生時,遊戲控制器選擇器將專注在 GuiObject 上。
如果您想從遊戲控制器檢查專注度,您可以使用 GuiObject.SelectionLost 事件。
當 GUI 獲得選擇專注時,SelectedObject 屬性的值也會改變選擇。要確定哪個 GUI 獲得選擇,請檢查此屬性的值。
範例程式碼
local guiObject = script.Parent
local function selectionGained()
print("The user has selected this button with a gamepad.")
end
guiObject.SelectionGained:Connect(selectionGained)
SelectionLost
此事件發生時,遊戲控制器選擇器停止專注在 GUI 上。
如果您想從遊戲控制器檢查,請選擇開始專注在 GUI 元素上,您可以使用 GuiObject.SelectionGained 事件。
當 GUI 失去選擇焦點時,SelectionObject 屬性值可能會改變為 nil 或獲得選擇焦點的 GUI 元素。要確定哪個 GUI 獲得選擇,或不選擇任何 GUI,請檢查此屬性值。
範例程式碼
local guiObject = script.Parent
local function selectionLost()
print("The user no longer has this selected with their gamepad.")
end
guiObject.SelectionLost:Connect(selectionLost)
TouchLongPress
TouchLongPress 事件發生在玩家按住指定 UI 元素使用觸摸啟用的裝置時,會發生一個稍微的時間段,其後表示��
這個事件只需要一個手指,因此這個事件可以在 Studio 中使用 emulator 和一個滑鼠來模擬。
參數
一個用於描述手勢中涉及的指彈位置的相對位置的 Datatype.Vector2 矩陣。
一個 Enum.UserInputState 描述手勢狀態的狀態:
- 開始火焰一次在手勢開始 (在簡短延遲後)
- 改變玩家移動指導器時發生的火焰
- 在手勢結束時發射一次。
範例程式碼
local frame = script.Parent
frame.Active = true
local dragging = false
local basePosition
local startTouchPosition
local borderColor3
local backgroundColor3
local function onTouchLongPress(touchPositions, state)
if state == Enum.UserInputState.Begin and not dragging then
-- Start a drag
dragging = true
basePosition = frame.Position
startTouchPosition = touchPositions[1]
-- Color the frame to indicate the drag is happening
borderColor3 = frame.BorderColor3
backgroundColor3 = frame.BackgroundColor3
frame.BorderColor3 = Color3.new(1, 1, 1) -- White
frame.BackgroundColor3 = Color3.new(0, 0, 1) -- Blue
elseif state == Enum.UserInputState.Change then
local touchPosition = touchPositions[1]
local deltaPosition = UDim2.new(
0,
touchPosition.X - startTouchPosition.X,
0,
touchPosition.Y - startTouchPosition.Y
)
frame.Position = basePosition + deltaPosition
elseif state == Enum.UserInputState.End and dragging then
-- Stop the drag
dragging = false
frame.BorderColor3 = borderColor3
frame.BackgroundColor3 = backgroundColor3
end
end
frame.TouchLongPress:Connect(onTouchLongPress)
TouchPan
玩家使用觸摸啟用的裝置移動指針時,TouchPan事件會發生。它會在GuiObject.TouchSwipe即將發生之前發生,並不會發生在GuiObject.TouchTap。這個事件對允許玩家操作屏幕上的UI元素位置很有用。
這個事件會發生在包含 Vector2 個桌子,描述指定手勢參與者的相對屏幕位置。此外,它會在多次發生: Enum.UserInputState.Begin 後,在玩家移動他們的手指期間,以及最後一次 num.usere輸入狀態.變
這個事件無法在 Studio 使用 emulator 和滑鼠模擬;您必須有一個真實的觸摸啟用裝置才能發射它。
參數
範例程式碼
local innerFrame = script.Parent
local outerFrame = innerFrame.Parent
outerFrame.BackgroundTransparency = 0.75
outerFrame.Active = true
outerFrame.Size = UDim2.new(1, 0, 1, 0)
outerFrame.Position = UDim2.new(0, 0, 0, 0)
outerFrame.AnchorPoint = Vector2.new(0, 0)
outerFrame.ClipsDescendants = true
local dragging = false
local basePosition
local function onTouchPan(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Begin and not dragging then
dragging = true
basePosition = innerFrame.Position
outerFrame.BackgroundTransparency = 0.25
elseif state == Enum.UserInputState.Change then
innerFrame.Position = basePosition + UDim2.new(0, totalTranslation.X, 0, totalTranslation.Y)
elseif state == Enum.UserInputState.End and dragging then
dragging = false
outerFrame.BackgroundTransparency = 0.75
end
end
outerFrame.TouchPan:Connect(onTouchPan)
TouchPinch
TouchPinch事件發生時玩家使用兩個手指對UI元素施加壓力或拖曳動作,使用觸摸啟用的裝置。 TouchPinch 發生當兩個或更多的手指移動到一起,並且拉
此事件發生時,表示 Vector2 表述指定手勢參與者的相對屏幕位置。此外,它還會發生多次: Enum.UserInputState.Begin 後稍微延遲, Enum.UserInputState.Change
這個事件需要至少兩個手指,因此 Studio 無法使用 emulator 和滑鼠來模擬它;您必須有一個真正的觸摸啟用裝置。
參數
範例程式碼
local innerFrame = script.Parent
local outerFrame = innerFrame.Parent
outerFrame.BackgroundTransparency = 0.75
outerFrame.Active = true
outerFrame.Size = UDim2.new(1, 0, 1, 0)
outerFrame.Position = UDim2.new(0, 0, 0, 0)
outerFrame.AnchorPoint = Vector2.new(0, 0)
outerFrame.ClipsDescendants = true
local dragging = false
local uiScale = Instance.new("UIScale")
uiScale.Parent = innerFrame
local baseScale
local function onTouchPinch(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Begin and not dragging then
dragging = true
baseScale = uiScale.Scale
outerFrame.BackgroundTransparency = 0.25
elseif state == Enum.UserInputState.Change then
uiScale.Scale = baseScale * scale -- Notice the multiplication here
elseif state == Enum.UserInputState.End and dragging then
dragging = false
outerFrame.BackgroundTransparency = 0.75
end
end
outerFrame.TouchPinch:Connect(onTouchPinch)
TouchRotate
TouchRotate 事件發生,當玩家使用兩個手指在介面元素上執行壓縮或拉動動作時。 旋轉發生在角度線在兩個手指之間變更時。GuiObject.TouchPan 此事件對允許玩家操作介面元素在屏幕上旋轉的方式很有用
這個事件會發生在包含 Vector2 個桌子,描述指定手勢參與者的相對屏幕位置。此外,它會在多次發生: Enum.UserInputState.Begin 後,在玩家移動一個手指期間發生,並最後於 Enum.UserInputState.Change 發
這個事件需要至少兩個手指,因此不能使用 Studio 使用模擬器和滑鼠來模擬;您必須有一個真正的觸摸啟用裝置。
參數
範例程式碼
local innerFrame = script.Parent
local outerFrame = innerFrame.Parent
outerFrame.BackgroundTransparency = 0.75
outerFrame.Active = true
outerFrame.Size = UDim2.new(1, 0, 1, 0)
outerFrame.Position = UDim2.new(0, 0, 0, 0)
outerFrame.AnchorPoint = Vector2.new(0, 0)
outerFrame.ClipsDescendants = true
local dragging = false
local baseRotation = innerFrame.Rotation
local function onTouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Begin and not dragging then
dragging = true
baseRotation = innerFrame.Rotation
outerFrame.BackgroundTransparency = 0.25
elseif state == Enum.UserInputState.Change then
innerFrame.Rotation = baseRotation + rotation
elseif state == Enum.UserInputState.End and dragging then
dragging = false
outerFrame.BackgroundTransparency = 0.75
end
end
outerFrame.TouchRotate:Connect(onTouchRotate)
TouchSwipe
觸摸棒事件發生,當玩家使用內容提示元素上的觸摸手勢時,觸摸手勢的方向(向上、向下、向左或向右)和觸摸點數的數量(點數)。觸摸手勢通常用於變更移動設裝置的標籤。
這個事件只需要一個手指,因此可以在 Studio 使用模擬器和滑鼠來模擬。
參數
指向 Enum.SwipeDirection 的動作方向。
觸摸點的數量(通常為 1)。
範例程式碼
local frame = script.Parent
frame.Active = true
-- How far the frame should bounce on a successful swipe
local BOUNCE_DISTANCE = 50
-- Current state of the frame
local basePosition = frame.Position
local hue = 0
local saturation = 128
local function updateColor()
frame.BackgroundColor3 = Color3.fromHSV(hue / 256, saturation / 256, 1)
end
local function onTouchSwipe(swipeDir, _touchCount)
-- Change the BackgroundColor3 based on the swipe direction
local deltaPos
if swipeDir == Enum.SwipeDirection.Right then
deltaPos = UDim2.new(0, BOUNCE_DISTANCE, 0, 0)
hue = (hue + 16) % 255
elseif swipeDir == Enum.SwipeDirection.Left then
deltaPos = UDim2.new(0, -BOUNCE_DISTANCE, 0, 0)
hue = (hue - 16) % 255
elseif swipeDir == Enum.SwipeDirection.Up then
deltaPos = UDim2.new(0, 0, 0, -BOUNCE_DISTANCE)
saturation = (saturation + 16) % 255
elseif swipeDir == Enum.SwipeDirection.Down then
deltaPos = UDim2.new(0, 0, 0, BOUNCE_DISTANCE)
saturation = (saturation - 16) % 255
else
deltaPos = UDim2.new()
end
-- Update the color and bounce the frame a little
updateColor()
frame.Position = basePosition + deltaPos
frame:TweenPosition(basePosition, Enum.EasingDirection.Out, Enum.EasingStyle.Bounce, 0.7, true)
end
frame.TouchSwipe:Connect(onTouchSwipe)
updateColor()
TouchTap
觸摸事件發生當玩家使用啟用觸摸的裝置對 UI 元素執行觸摸動作時。 觸摸是一種快速的單觸,無需任何移動 (一個更長的按鈕將發射 Class.Gui
這個事件只需要一個手指,因此可以在 Studio 使用模擬器和滑鼠來模擬。
參數
一個用於描述手勢中涉及的指彈位置的相對位置的 Datatype.Vector2 矩陣。
範例程式碼
local frame = script.Parent
frame.Active = true
local function onTouchTap()
-- Toggle background transparency
if frame.BackgroundTransparency > 0 then
frame.BackgroundTransparency = 0
else
frame.BackgroundTransparency = 0.75
end
end
frame.TouchTap:Connect(onTouchTap)