GuiObject

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立
無法瀏覽

GuiObject 是一個抽象類 (非常像 BasePart ) 對 2D 用戶界面對物件。它定義

要特殊方式操作GUI對象的布局,您可以使用清單/伸展或網格,並且通過外觀模組來更改它們。

雖然您可以使用 InputBeganInputEnded 來檢測任何 GUI 對象上的滑鼠按鈕事件,但只有 ImageButton 和 1>

概要

屬性

屬性 繼承自 GuiBase2d

方法

活動

活動 繼承自 GuiBase2d

屬性

Active

平行讀取

此屬性決定此 GuiObject 會否將輸入變成 3D 空間,例如基礎模型具有 ClickDetector 類型,如 DragDetector 。在其他話來說,如果玩家嘗試用滑鼠點擊啟動的 UI 元素,則 UI 將阻止輸入從達到滑鼠狀態到達偵測器

對於 Class.GuiButton 對象 ( Class.ImageButton 和 Class.TextButton )

範例程式碼

TextButton Active Debounce

-- 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> 的擴展) 。

請在 這裡 查看裝飾圖和說明。

範例程式碼

AnchorPoint Demo

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 對象可能會因子內容而重新尺寸。

有關這個屬性的使用方法和工作方式,請參閱 這裡

範例程式碼

LocalScript in a ScreenGui

-- 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的顏色 (填充顏色)。如果您的元素包含文字,例如TextBoxTextButton或1>Class.TextLabel1>,請確認背景顏色與文字顏色相反。

另一個決定背景視覺屬性的重要參數是 GuiObject.BackgroundTransparency ;如果此參數設為 1 ,背景或邊框都不會成像。

也參閱 BorderColor3

範例程式碼

Rainbow Frame

-- 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 是 TextBoxTextButton 或 2>Class.Text

如果此屬性設為 1 ,背景或邊框都不會渲染,而且GUI 背景將完全透明。

BorderColor3

平行讀取

決定 GuiObject 長方形邊框的顏色 (也稱為線條顏色)。這與對物件的 GuiObject.BackgroundColor3 屬性無關。如果 GuiObject.BorderSizePixel 屬性設為 1> 01> ,您將無法看到對物件的邊框。

注意,UIStroke 零件可以啟用更先進的邊框效果。

範例程式碼

Button Highlight

-- 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 可以覆蓋此屬性,允許進一步的邊框效果。

範例程式碼

Button Highlight

-- 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 元素。

唯讀
未複製
平行讀取

當玩家的手指在 GuiObject

Interactable

平行讀取

決定 GuiButton 是否可以與或不與互動,或是否要檢查 GuiStateGuiObject 是否正在變更或不變更。

GuiButton 上:

  • Interactable 設定在 GuiButton 上時,false 將不再能壓扁或點擊,而 1> Class.GuiButton1> 將一直設置為 <
  • Interactable 設定在 GuiButton 上時,true 會再次設定為 1> Class.GuiButton1> ,4> Class.GuiObject.GuiState|GuiState4> 將再次設置正常。

GuiObject 上:

LayoutOrder

平行讀取

此屬性控制使用 GuiObject (例如 UIGridStyleLayoutUIListLayout ) 使用 2>Class.UIGridStyleLayout.SortOrder|SortOrder2> 設置時的排序順序

GuiObjects 按照上升的順序排序,其中最低的值佔優先權。對於擁有相同值的對象,將會回到原來的順序。

如果您不確定在未來是否需要在兩個現有元素之間添加元素,那麼您應該使用 1000100 、1> 2001> 等)的多重值來指定位置。這樣可以確保在其他元素之間的大範�

也參閱 ZIndex,以確定對物件的 渲染 順序而不是排序順序。

NextSelectionDown

平行讀取

這個屬性設定 GuiObject 選擇器在使用者移動遊戲控制器向下移動時會選擇。如果此屬性為空,將遊戲控制器向下移動不會變更選擇的 GUI。

將遊戲控制器選擇器向下移動設定 GuiService.SelectedObject 到此對象,除非 GUI 不是 Selectable 。注意,此屬性可以設置在 GUI 元素,即使它不是 Selectable 。因此,

也參閱 NextSelectionUpNextSelectionLeftNextSelectionRight

範例程式碼

Creating a Gamepad Selection Grid

-- 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 。因此,您應該確

也參閱 NextSelectionUpNextSelectionDownNextSelectionRight

範例程式碼

Creating a Gamepad Selection Grid

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

也參閱 NextSelectionUpNextSelectionDownNextSelectionLeft

範例程式碼

Creating a Gamepad Selection Grid

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

範例程式碼

Creating a Gamepad Selection Grid

-- 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.SelectionGainedGuiObject.SelectionLost 將對元素不會發射。若要選擇一個 GuiObject,您必須變更 GuiService.SelectedObject 屬性。

這個屬性有助於在多個 GUI 通過屬性如此 GuiObject.NextSelectionUp , GuiObject.NextSelectionDown , Class.GuiObj|NextSelectionRight</

範例程式碼

Limiting TextBox Selection

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 會覆蓋選取的 GuiObjectSize 的圖像。為了獲得最佳結果,您應該將自訂 1> SelectionImageObject1> 尺寸為 4> Datatype.UDim2

SelectionImageObject 變更為 GuiObject 元素只會影響該元素。要影響所有用戶的 GUI 元素,請設置 PlayerGui.SelectionImageObject 屬性。

要確定或設置哪一個使用者選擇的 GUI 元素,您可以使用 GuiService.SelectedObject 屬性。玩家使用遊戲手柄選擇不同的 GUI 元素,並且使用 Class.Gui

SelectionOrder

平行讀取

低選擇程序的GUI對象會在開始遊戲控制器選擇時選擇更早,而高選擇程序的GUI對象會在開始遊戲祖先選擇時選擇更早。此屬性對方向導航沒有影響。預設值為0。

Size

平行讀取

此屬性使用 GuiObject 決定 UDim2 的乘數和畫素尺寸。

指數尺寸與任何親級GUI元素的大小相對,如有。

Datatype.UDim2 的像素零件無論是否為父級GUI的大小相同。這些值代表對象的像素大小。對物件的實際像素大小可以從GuiBase2d.AbsoluteSize 屬性閱取。

如果 GuiObject 有父父元素,其在各軸上的大小也會受到父元素親的 SizeConstraint 的影響。

範例程式碼

Health Bar

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

SizeConstraint

平行讀取

這個屬性設置 Size 軸,與 GuiObject 的大小相對。

這個屬性有助於創建用於縮放與父對象的寬度 高度的對物件,但不會兩個,有效保存對物件的外觀比例。

Transparency

隱藏
未複製
平行讀取

Class.GuiObject.BackgroundTransparency|BackgroundTransparency 和 TextTransparency 的混合屬性。

Visible

平行讀取

此屬性將包括 GuiObject 和它的子孫。

Class.GuiObject 的個別零件可以通過透明度屬性來個別控制GuiObject.BackgroundTransparencyTextLabel.TextTransparency 和 1>Class.ImageLabel.ImageTransparency1> 。

當此屬性為 false 時,GuiObject 將被擁有由 UIListLayout 、1> Class.UIGridLayout1> 和 4> Class.UITableLayout4> 等結構來忽略。 在其他 words,空間將被其他元素使用。

範例程式碼

UI Window

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.EasingDirectionEnum.EasingStyle 來寫入新位置。

此函數將返回減速器是否播玩 遊玩。如果另一個減速器正在 GuiObject 上,則不會播放。

也看:

參數

endPosition: UDim2

GUI 應該放置在哪裡。

easingDirection: Enum.EasingDirection

將 GUI 調整到 endPosition 的方向。

預設值:"Out"
easingStyle: Enum.EasingStyle

用於將 GUI 調整至 endPosition 的風格。

預設值:"Quad"
time: number

幾秒鐘的時間,在秒単位的時間,晃動的時間。

預設值:1
override: bool

擾動器會否覆蓋在進行中的擾動器。

預設值:false
callback: function

當 твин完成時執行的回潮函數。

預設值:"nil"

返回

是否玩 遊玩放擺動。

範例程式碼

Tween a GUI's Position

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。

也看:

參數

endSize: UDim2

GUI 的尺寸應該重新調整。

easingDirection: Enum.EasingDirection

將 GUI 調整到 endSize 的方向。

預設值:"Out"
easingStyle: Enum.EasingStyle

用於將 GUI 調整至 endSize 的風格。

預設值:"Quad"
time: number

幾秒鐘的時間,在秒単位的時間,晃動的時間。

預設值:1
override: bool

擾動器會否覆蓋在進行中的擾動器。

預設值:false
callback: function

當 твин完成時執行的回潮函數。

預設值:"nil"

返回

是否玩 遊玩放擺動。

範例程式碼

Tween a GuiObject's Size

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.EasingDirectionEnum.EasingStyle 來儲存資料。

此函數將返回減速器是否播玩 遊玩。 通常此將永遠返回 true,但如果另一個減速器啟用,則將返回 false。

也看:

參數

endSize: UDim2

GUI 的尺寸應該重新調整。

endPosition: UDim2

GUI 應該放置在哪裡。

easingDirection: Enum.EasingDirection

將 GUI 調整到 endSizeendPosition 的方向。

預設值:"Out"
easingStyle: Enum.EasingStyle

用於調整 GUI 大小和位置的造型。

預設值:"Quad"
time: number

幾秒鐘的時間,在秒単位的時間,晃動的時間。

預設值:1
override: bool

擾動器會否覆蓋在進行中的擾動器。

預設值:false
callback: function

當 твин完成時執行的回潮函數。

預設值:"nil"

返回

是否玩 遊玩放擺動。

範例程式碼

Tween a GUI's Size and Position

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 inputstate of input 和 1>Class.InputObj.Position|屏幕坐標1> 。


範例程式碼

Tracking the Beginning of Input on a GuiObject

-- 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 inputstate of input 和 1>Class.InputObj.Position|屏幕坐標1> 。


範例程式碼

GuiObject InputChanged Demo

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 inputstate of input 和 1>Class.InputObj.Position|屏幕坐標1> 。


範例程式碼

Tracking the End of Input on a GuiObject

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

請不要依賴此事件傳送的 xy 參數作為一種笨蛋方式來確定用戶在 GUI 中的滑鼠位置。這些坐標可能會在滑鼠從同一邊入入 GUI 時發生錯誤。這是因為坐標會指示滑鼠位置而不是正確的時間,例如當滑

這個事件會在 GUI 元素在另一個元素下重新渲染時發生。

如果您想跟蹤用戶的滑鼠離開 GUI 元素的時間,您可以使用 GuiObject.MouseLeave 事件。

也看:

參數

滑鼠標的 x 屏幕坐標在幾何形狀,相對於屏幕的左上角。

滑鼠的 y 螢幕坐標在幾何形狀中,與屏幕左上角的位置相對。


範例程式碼

Printing where a Mouse Enters a GuiObject

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 元素移動。

請不要依賴這個事件傳送的 xy 參數作為一個傻瓜方法來確定用戶的滑鼠在離開 GUI 時的位置。這些坐標可能會在滑鼠離開 GUI 時以相同的邊緣傳送,特別是當滑鼠離開 GUI 時快速離開時。這是

這個事件會在 GUI 元素在另一個元素下重新渲染時發生。

也看:

參數

滑鼠標的 x 屏幕坐標在幾何形狀,相對於屏幕的左上角。

滑鼠的 y 螢幕坐標在幾何形狀中,與屏幕左上角的位置相對。


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 元素。因此,xy 參數可能不完全匹配到 GUI 邊緣的坐標。

也看:

參數

滑鼠標的 x 屏幕坐標在幾何形狀,相對於屏幕的左上角。

滑鼠的 y 螢幕坐標在幾何形狀中,與屏幕左上角的位置相對。


MouseWheelBackward

輪子倒退事件發生,當使用者將鼠標輪子捲回 GUI 元素時,它與 Mouse.WheelBackward 類似,無論使用者的鼠標是否在 GUI 元素上。

此事件只是作為輪子向後運動的指標發動。這意味著 x 和 y 鼠標坐標參數不會因此事件而改變。這些坐標只會在鼠標移動時變更,這可以由 GuiObject.MouseMoved 事件追蹤。

也看:

參數

滑鼠標的 x 屏幕坐標在幾何形狀,相對於屏幕的左上角。

滑鼠的 y 螢幕坐標在幾何形狀中,與屏幕左上角的位置相對。


MouseWheelForward

輪子前進事件發生,當使用者將鼠標輪向前移動,當滑鼠位於 GUI 元素上。這與 Mouse.WheelForward 相似,無論使用者的鼠標位於 GUI 元素上。

此事件只是作為輪子前進運動的指標發射。這意味著 x 和 y 鼠標坐標參數不會因此事件而改變。這些坐標只會在鼠標移動時變更,這可以由 GuiObject.MouseMoved 事件追蹤。

也看:

參數

滑鼠標的 x 屏幕坐標在幾何形狀,相對於屏幕的左上角。

用戶滑鼠標的 y 坐標。


SelectionGained

此事件發生時,遊戲控制器選擇器將專注在 GuiObject 上。

如果您想從遊戲控制器檢查專注度,您可以使用 GuiObject.SelectionLost 事件。

當 GUI 獲得選擇專注時,SelectedObject 屬性的值也會改變選擇。要確定哪個 GUI 獲得選擇,請檢查此屬性的值。


範例程式碼

Handling GUI Selection Gained

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,請檢查此屬性值。


範例程式碼

Handling GUI Selection Lost

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 和一個滑鼠來模擬。

參數

touchPositions: Array

一個用於描述手勢中涉及的指彈位置的相對位置的 Datatype.Vector2 矩陣。

一個 Enum.UserInputState 描述手勢狀態的狀態:

  • 開始火焰一次在手勢開始 (在簡短延遲後)
  • 改變玩家移動指導器時發生的火焰
  • 在手勢結束時發射一次。

範例程式碼

Move UI Element with TouchLongPress

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 和滑鼠模擬;您必須有一個真實的觸摸啟用裝置才能發射它。

參數

touchPositions: Array

一個 Lua 列表,Vector2 個對象,每個對象都代表所有與手勢相關的指導手指。

totalTranslation: Vector2

指示滾動鍋從其起始點到達的距離。

velocity: Vector2

指示每個次元的手勢在哪裡執行的速度。

指示此手勢的 Enum.UserInputState


範例程式碼

Panning UI Element

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 和滑鼠來模擬它;您必須有一個真正的觸摸啟用裝置。

參數

touchPositions: Array

一個 Lua 列表,Vector2 個對象,每個對象都表示所有撬傷手勢的位置。

scale: number

一個漂浮指示彈出手勢開始時的差異。

velocity: number

一個表示彈簧手勢發生速度的漂浮。

指示此手勢的 Enum.UserInputState


範例程式碼

Pinch/Pull Scaling

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 使用模擬器和滑鼠來模擬;您必須有一個真正的觸摸啟用裝置。

參數

touchPositions: Array

一個 Lua 列表,Vector2 個對象,每個對象都代表所有與手勢相關的指導手指。

rotation: number

一個漂浮指示旋轉從開始手勢的地方。

velocity: number

一個漂浮指示手勢執行速度的。

指示此手勢的 Enum.UserInputState


範例程式碼

Touch Rotation

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 使用模擬器和滑鼠來模擬。

參數

swipeDirection: Enum.SwipeDirection

指向 Enum.SwipeDirection 的動作方向。

numberOfTouches: number

觸摸點的數量(通常為 1)。


範例程式碼

Bouncing Color Picker

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 使用模擬器和滑鼠來模擬。

參數

touchPositions: Array

一個用於描述手勢中涉及的指彈位置的相對位置的 Datatype.Vector2 矩陣。


範例程式碼

Tap Transparency Toggle

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)