BasePlayerGui
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
El BasePlayerGui es una clase abstracta de la que heredan todas las clases de almacenamiento de dibujos de interfaz gráfica.
Resumen
Métodos
Devuelve una lista de todas las instancias GuiObject que ocupan el punto dado en la pantalla.
Propiedades
Métodos
GetGuiObjectsAtPosition
Toma una posición de pantalla y devuelve una lista de todas las instancias GuiObject que están ocupando esa posición de pantalla, ordenadas en el orden en que aparecen en la pantalla de arriba hacia abajo como el primer y último índice, respectivamente.
El caso de uso principal es obtener objetos GUI bajo los clics o toques del mouse del jugador para hacer cosas como permitir la selección o el resalte.Estos efectos ya se pueden lograr usando GuiObject.MouseEnter y GuiObject.MouseLeave pero esto requiere que el desarrollador rastree estos eventos para sus objetos de interfaz de usuario todo el tiempo, incluso si solo necesitan esta funcionalidad en situaciones específicas.
Dado que las clases hijas de BasePlayerGui heredan esta función, puede ser disparada por objetos de clase como las carpetas PlayerGui y StarterGui.
Parámetros
La posición x en la pantalla con respecto a la esquina superior izquierda después de que se aplique el GuiInset se aplica.
Devuelve
Una tabla de las instancias GuiObject que ocupan el espacio de pantalla dado.
Muestras 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.
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)