BasePlayerGui
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Il BasePlayerGui è una classe astratta da cui ereditano tutte le classi di storage di disegno GUI.
Sommario
Proprietà
Metodi
Restituisce un elenco di tutte le GuiObject istanze che occupano il punto dato sullo schermo.
Proprietà
Metodi
GetGuiObjectsAtPosition
Prende una posizione sullo schermo e restituisce un elenco di tutte le GuiObject istanze che stanno occupando quella posizione sullo schermo, ordinato nell'ordine in cui appaiono sullo schermo dal top al bottom come primo e ultimo indice, rispettivamente.
Il caso d'uso principale è quello di ottenere oggetti GUI sotto gli input del mouse o del tocco del Giocatoreper fare cose come consentire la selezione o l'evidenziazione.Questi effetti possono essere già ottenuti utilizzando GuiObject.MouseEnter e GuiObject.MouseLeave ma ciò richiede che il sviluppatore tracci questi eventi per i loro oggetti UI per tutto il tempo anche se hanno solo bisogno di questa funzionalità in situazioni specifiche.
Poiché le classi figlie di BasePlayerGui ereditano questa funzione, può essere attivata da oggetti di classe come le cartelle PlayerGui e StarterGui.
Parametri
La posizione x sullo schermo rispetto all'angolo in alto a sinistra dopo il GuiInset viene applicata.
Restituzioni
Una tabella delle GuiObject istanze che occupano lo Spaziosullo schermo dato.
Campioni di codice
All GUIs returned by BasePlayerGui:GetGuiObjectsAtPosition() are 'cloned' by the highlightAsFrame() local function, which creates a Frame GUI positioned on top of the specified GUI that is semi-transparent and the same GuiBase2d.AbsoluteSize and GuiBase2d.AbsolutePosition.
These highlights are added to the HighlightsContainer ScreenGui in the Highlight folder of the player's PlayerGui folder. Both are created by the code sample. All highlight GUIs are Instance:Destroy()ed every time highlightGui() executes.
Note that HighlightContainer's ScreenGui.DisplayOrder is 99999, a large number, so that it is unlikely any other GUI will render on top of the highlight GUIs.
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Create a Folder and ScreenGui to contain the highlight Frames
local highlights = Instance.new("Folder")
highlights.Name = "Highlights"
highlights.Parent = playerGui
local highlightsContainer = Instance.new("ScreenGui")
highlightsContainer.Name = "Container"
highlightsContainer.Parent = highlights
highlightsContainer.DisplayOrder = 99999
-- Creates a semi-transparent yellow Frame on top of the gui with the same AbsoluteSize and AbsolutePosition
local function highlightAsFrame(gui)
local highlight = Instance.new("Frame")
highlight.Name = "Highlight"
highlight.Parent = highlightsContainer
highlight.Size = UDim2.new(0, gui.AbsoluteSize.X, 0, gui.AbsoluteSize.Y)
highlight.Position = UDim2.new(0, gui.AbsolutePosition.X, 0, gui.AbsolutePosition.Y)
highlight.BackgroundColor3 = Color3.fromRGB(255, 255, 10) -- Yellow
highlight.BackgroundTransparency = 0.75
highlight.BorderSizePixel = 0
highlight.LayoutOrder = gui.LayoutOrder - 1
end
-- Use GetGuiObjectsAtPosition to get and highlight all GuiObjects at the input's position
local function highlightGui(input, _gameProcessed)
local pos = input.Position
local guisAtPosition = playerGui:GetGuiObjectsAtPosition(pos.X, pos.Y)
highlightsContainer:ClearAllChildren()
for _, gui in ipairs(guisAtPosition) do
if gui:IsA("GuiObject") then
highlightAsFrame(gui)
end
end
end
-- Fire highlightGui on InputBegan if input is of type MouseButton1 of Touch
local function InputBegan(input, gameProcessed)
local inputType = input.UserInputType
local touch = Enum.UserInputType.Touch
local mouse1 = Enum.UserInputType.MouseButton1
if inputType == touch or inputType == mouse1 then
highlightGui(input, gameProcessed)
end
end
UserInputService.InputBegan:Connect(InputBegan)