BasePlayerGui
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Le BasePlayerGui est une classe abstraite que toutes les classes de stockage de dessin GUI héritent.
Résumé
Méthodes
Renvoie une liste de toutes les instances GuiObject qui occupent le point donné sur l'écran.
Propriétés
Méthodes
GetGuiObjectsAtPosition
Prend une position d'écran et renvoie une liste de toutes les instances GuiObject qui occupent cette position d'écran, triées dans l'ordre dans lequel elles apparaissent à l'écran du haut vers le bas comme le premier et le dernier index, respectivement.
L'utilisation principale consiste à obtenir des objets GUI sous les entrées souris ou tactiles du joueur pour faire des choses comme permettre la sélection ou la mise en évidence.Ces effets peuvent déjà être réalisés en utilisant GuiObject.MouseEnter et GuiObject.MouseLeave mais cela nécessite que le développeur suive ces événements pour ses objets d'interface utilisateur tout le temps, même s'il n'a besoin de cette fonctionnalité que dans des circonstances spécifiques.
Puisque les classes enfants de BasePlayerGui héritent de cette fonction, elles peuvent être déclenchées par des objets de classe tels que les dossiers PlayerGui et StarterGui.
Paramètres
La position x sur l'écran par rapport au coin supérieur gauche après le GuiInset est appliquée.
Retours
Une table des instances GuiObject qui occupent l'espace d'écran donné.
Échantillons de code
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)