BasePlayerGui

Mostrar obsoleto

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Não criável

O BasePlayerGui é uma classe abstrata que todas as classes de armazenamento de desenho de GUI herdam.

Propriedades

Métodos

GetGuiObjectsAtPosition

Instances

Toma uma posição na tela e retorna uma lista de todas as instâncias GuiObject que estão ocupando essa posição na tela, classificadas na ordem em que aparecem na tela, de cima para baixo, como o primeiro e último índice, respectivamente.

O principal caso de uso é obter objetos de GUI sob os cliques ou toques do mouse do jogador para fazer coisas como permitir seleção ou destaque.Esses efeitos já podem ser alcançados usando GuiObject.MouseEnter e GuiObject.MouseLeave mas isso requer que o desenvolvedor monitore esses eventos para seus objetos de UI o tempo todo, mesmo que eles só precisem dessa funcionalidade em situações específicas.

Como as classes filhas de BasePlayerGui herdam essa função, elas podem ser disparadas por objetos de classe, como os arquivos PlayerGui e StarterGui.

Parâmetros

A posição x na tela em relação ao canto superior esquerdo após o GuiInset é aplicada.

Valor Padrão: ""

A posição y na tela em relação ao canto superior esquerdo após o GuiInset é aplicada.

Valor Padrão: ""

Devolução

Instances

Uma tabela das instâncias GuiObject que ocupam o espaço de tela dado.

Amostras de código

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.

Selecting GUIs at a Position

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)

Eventos