BasePlayerGui
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
BasePlayerGui, tüm GUI çizme depolama sınıflarının miras aldığı soyut bir sınıftır.
Özet
Özellikler
Yöntemler
Ekranda verilen noktada bulunan tüm GuiObject örneklerin bir listesini döndürür.
Özellikler
Yöntemler
GetGuiObjectsAtPosition
Bir ekran konumunu alır ve bu ekran konumunu işgal eden tüm GuiObject örneklerin bir listesini döndürür, bunlar sırasıyla ekranda ilk ve son indeks olarak göründükleri sırayla sıralanır.
Ana kullanım durumu, oyuncunun fare veya dokunma girişleri altında GUI nesnelerini almak ve seçim izin vermek veya vurgulamak gibi şeyler yapmaktır.Bu etkiler zaten GuiObject.MouseEnter ve GuiObject.MouseLeave kullanılarak elde edilebilir, ancak bunun için geliştiricinin bu olayları kullanıcı arayüzü nesneleri için tüm zaman izlemesi gerekir, ancak sadece belirli durumlarda bu işlevsellik gerekir.
BasePlayerGui çocuk sınıfları bu işlevi miras aldığından, PlayerGui ve StarterGui klasörler gibi sınıf nesneleri tarafından ateşlenebilir.
Parametreler
Dönüşler
Verilen ekran alanını işgal eden GuiObject örneklerin bir tablosu.
Kod Örnekleri
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)