GuiObject
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
GuiObject bir 2D kullanıcı arayüzü nesnesi için soyut bir sınıftır (BasePart gibi)Bir grafik kullanıcı arayüzü (GUI) nesnesinin görüntülenmesiyle ilgili tüm özellikleri tanımlar, örneğin Size ve Position .Ayrıca AbsolutePosition , AbsoluteSize ve AbsoluteRotation gibi bazı yararlı sadece okuma özelliklerine sahiptir.
GUI nesnelerinin düzenini özel bir şekilde manipüle etmek için, liste/flex veya ızgara gibi bir düzen yapısını kullanabilir ve onları çekirdek özelliklerinin ötesinde stilize edebilirsiniz görünüm değiştiricileriyle.
ve kullanarak herhangi bir GUI nesnesinde fare düğmesi etkinliklerini tespit etmek mümkün olsa da, sadece ve fare tıklama/basma gibi uygun özel etkinliklere sahiptir.
Özet
Özellikler
Bu UI öğesinin girişi alıp almadığını belirler.
Bir GuiObject 'in mutlak boyutuna göre kaynağı noktasını belirler, mutlak boyutuna göre.
Yeniden boyutlandırmanın çocuk içeriğine dayalı olup olmadığını belirler.
GuiObject arka plan rengini belirler.
GuiObject arka planının ve sınırının saydamlığını belirler.
GuiObject sınırının rengini belirler.
GuiObject sınırının boyutlarına göre nasıl düzenleneceğini belirler.
GuiObject sınırının piksel genişliğini belirler.
Ebeveyn bir GUI öğesinin sınırlarının dışında olup olmadığına bakarak altının GuiObjects renderlanması gereip geremediğini belirler.
oyuncumouse'unun GuiObject üzerinde aktif olarak basılıp basılmadığını belirler.
GuiButton ile etkileşime girilebilir olup olmadığını veya GuiState 'nin değişip değişmediğini belirler, ya da GuiObject 'nin değişip değişmediği.
Bir GuiObject ile kullanıldığında UIGridStyleLayout sıralama düzenini kontrol eder.
Oyun kolu seçicisi aşağıya kaydırıldığında seçilecek GuiObject ayarını ayarlar
Oyun kolu seçicisinin sola taşındığında seçilecek GuiObject ayarını ayarlar
Oyun kolu seçicisinin sağa taşındığında seçilecek GuiObject ayarını ayarlar
Oyun kolu seçicisi yukarı taşındığında seçilecek GuiObject ayarını ayarlar
GuiObject 'nin piksel ve skalar konumunu belirler.
GuiObject döndürüldüğünde döndürülen derece sayısını belirler.
GuiObject bir oyun kolu tarafından seçilebilir olup olmadığını belirleyin.
Oyun konsolları için kullanılan varsayılan seçim aksesuarlarını değiştirir.
Oyun kumanda UI seçimi tarafından seçilen GuiObjects sırası.
GuiObject 'nin piksel ve skalar büyüklüğünü belirler.
Size eksenlerini ayarlar, üzerinde ebeveynin boyutuna göre yapılacak GuiObject , ebeveynin boyutuna göre yapılacak
BackgroundTransparency ve TextTransparency 'in karışık bir özelliği.
GuiObject ve onun soyundakilerin render edilecek olup olmadığını belirler.
Bir GuiObject'nin diğerlerine göre hangi sırayla görüntüleneceğini belirler.
Bir GuiBase2d öğesinin gerçek ekran konumunu, piksel olarak tanımlar.
Bir GuiBase2d öğesinin gerçek ekran dönüşünü derecelerle tanımlar.
Bir GuiBase2d öğesinin gerçek ekran boyutunu, piksel olarak tanımlar.
true olarak ayarlanırsa, yerelleştirme bu GuiBase2d ve onun soyundakilere uygulanacaktır.
Bu GuiBase2d ve onun soyundakilere otomatik yerelleştirme uygulamak için kullanılacak bir LocalizationTable.
Aşağı yönünde oyun kolu seçim davranışını özelleştirir.
Oyun kolu seçim davranışını sol yönde özelleştirir.
Oyun kolu seçim davranışını doğru yönde özelleştirir.
Oyun kolu seçim davranışını yukarı yönünde özelleştirir.
Oyun kolu seçim hareketinin özelleştirilmesine izin verir.
Yöntemler
- TweenPosition(endPosition : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : boolean,callback : function):boolean
Bir GUI'yi yumuşakça yeni bir UDim2 'ye taşır.
- TweenSize(endSize : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : boolean,callback : function):boolean
Bir GuiObject 'yi yumuşak bir şekilde yeni bir UDim2 'ye yeniden boyutlandırır.
- TweenSizeAndPosition(endSize : UDim2,endPosition : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : boolean,callback : function):boolean
Bir GUI'yi yumuşakça yeni bir boyuta ve konuma taşır.
Etkinlikler
Bir kullanıcı, İnsan-Bilgisayar Arayüzü cihazı aracılığıyla etkileşime başladığında ateş edilir (Fare düğmesi aşağı, dokunma başlar, klavye düğmesi aşağı, vb.).
Bir kullanıcı, İnsan-Bilgisayar Arayüzü cihazı aracılığıyla nasıl etkileşime girdiğini değiştirdiğinde ateş edilir (Fare düğmesü aşağı, dokunma başlar, klavye düğmesi aşağı, vb.).
Bir kullanıcı, İnsan-Bilgisayar Arayüzü cihazı aracılığıyla etkileşime son verdiğinde ateş edilir (Mouse düğmes aşağı, dokunma başlar, klavye düğmesi aşağı, vb.).
Bir kullanıcının fareini bir GUI öğesine taşıdığında ateş eder.
Bir kullanıcı GUI öğesinden fareni taşıdığında ateş eder.
Bir kullanıcı bir GUI öğesinin içindeyken fareyi hareket ettirdiğinde herhangi bir zamanda ateş eder.
Bir kullanıcı, fare bir GUI öğesinin üzerinde olduğunda fare tekerleğini geri sürüklediğinde ateş eder.
Bir kullanıcı, fare işaretçisi bir GUI öğesinin üzerinde olduğunda fare tekerleğini ileriye doğru kaydırdığında ateş eder.
GuiObject, Gamepad seçicisi ile odaklanırken ateş edildi.
Oyun Konsolu seçicisi GuiObject'e odaklanmayı bıraktığında ateş edilir.
Oyuncu başladığında, devam ettiğinde ve uzun süre UI öğesine basmayı bıraktığında ateş eder.
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState):RBXScriptSignal
Oyuncu UI öğesine parmağını hareket ettirdiğinde ateş eder.
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState):RBXScriptSignal
Oyuncu, UI öğesinde iki parmağı kullanarak bir kıskaç veya çekme hareketi gerçekleştirdiğinde ateş eder.
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState):RBXScriptSignal
Oyuncu, UI öğesinde iki parmağı kullanarak bir dönüş hareketi gerçekleştirdiğinde ateş eder.
Oyuncu UI öğesine kaydırma hareketi yaptığında ateş eder.
Oyuncu UI öğesine dokunma hareketi yaptığında ateş eder.
- SelectionChanged(amISelected : boolean,previousSelection : GuiObject,newSelection : GuiObject):RBXScriptSignal
Oyun kolu seçimi, hareket eder, değişir veya bağlantılı GuiBase2d veya herhangi bir altın içinde değişir, bağlantılı GuiObjects .
Özellikler
Active
Bu özellik, GuiObject 'nin girişi 3B uzaya batırıp batırmayacağını belirler, örneğin ClickDetector gibi temel modellerle bir DragDetector sınıfı.
For GuiButton nesneleri ( ImageButton ve TextButton ), bu özellik Activated ateşlerinin ( AutoButtonColor hala bunlar için çalışacak) olup olmadığını belirler.Etkinlikler InputBegan , InputChanged ve InputEnded bu özelliğin değeri ne olursa olsun normal çalışır.
Kod Örnekleri
This code sample demonstrates the usage of the Active property as a debounce for the Activated event.
-- Place this LocalScript within a TextButton (or ImageButton)
local textButton = script.Parent
textButton.Text = "Click me"
textButton.Active = true
local function onActivated()
-- This acts like a debounce
textButton.Active = false
-- Count backwards from 5
for i = 5, 1, -1 do
textButton.Text = "Time: " .. i
task.wait(1)
end
textButton.Text = "Click me"
textButton.Active = true
end
textButton.Activated:Connect(onActivated)
AnchorPoint
Bu özellik, mutlak büyüklüğüne göre bir GuiObject 'nin kaynağını belirler.Köken noktası, elemanın konumlandırıldığı yeri (GuiObject.Position) ve sunulan GuiObject.Size genişlediği yeri belirler.
Açıklanmış diyagramlar ve detaylar için buraya bakın.
Kod Örnekleri
This code sample moves a UI element to different sides of the parent element. It starts at the top-left and ends at the bottom-right. Paste into a LocalScript in a Frame, within a ScreenGui.
local guiObject = script.Parent
while true do
-- Top-left
guiObject.AnchorPoint = Vector2.new(0, 0)
guiObject.Position = UDim2.new(0, 0, 0, 0)
task.wait(1)
-- Top
guiObject.AnchorPoint = Vector2.new(0.5, 0)
guiObject.Position = UDim2.new(0.5, 0, 0, 0)
task.wait(1)
-- Top-right
guiObject.AnchorPoint = Vector2.new(1, 0)
guiObject.Position = UDim2.new(1, 0, 0, 0)
task.wait(1)
-- Left
guiObject.AnchorPoint = Vector2.new(0, 0.5)
guiObject.Position = UDim2.new(0, 0, 0.5, 0)
task.wait(1)
-- Dead center
guiObject.AnchorPoint = Vector2.new(0.5, 0.5)
guiObject.Position = UDim2.new(0.5, 0, 0.5, 0)
task.wait(1)
-- Right
guiObject.AnchorPoint = Vector2.new(1, 0.5)
guiObject.Position = UDim2.new(1, 0, 0.5, 0)
task.wait(1)
-- Bottom-left
guiObject.AnchorPoint = Vector2.new(0, 1)
guiObject.Position = UDim2.new(0, 0, 1, 0)
task.wait(1)
-- Bottom
guiObject.AnchorPoint = Vector2.new(0.5, 1)
guiObject.Position = UDim2.new(0.5, 0, 1, 0)
task.wait(1)
-- Bottom-right
guiObject.AnchorPoint = Vector2.new(1, 1)
guiObject.Position = UDim2.new(1, 0, 1, 0)
task.wait(1)
end
AutomaticSize
Bu özellik, soyutlarının boyutuna dayanarak ebeveyn UI nesnelerinin otomatik olarak boyutlandırılması için kullanılır.Bu özelliği kullanarak, düzenleme veya çalışma sırasında bir UI nesnesine dinamik olarak metin ve diğer içerikler ekleyebilir ve boyut bu içeriğe uyacak şekilde ayarlanacaktır.
değerine ayarlanırsa, bu UI nesnesi çocuk içeriğine bağlı olarak yeniden boyutlandırılabilir.
Bu özelliğin nasıl kullanılacağına ve nasıl çalıştığına daha fazla bilgi için, lütfen buraya bakın.
Kod Örnekleri
The following script creates an automatically-sized parent frame with aUIListLayout, then it inserts several automatically-sized TextLabel objects. Note how the parent UIListLayout automatically resizes to fit its child content and the labels automatically resize to fit their text content. This script can be parented to a ScreenGui.
-- Array of text labels/fonts/sizes to output
local labelArray = {
{ text = "Lorem", font = Enum.Font.Creepster, size = 50 },
{ text = "ipsum", font = Enum.Font.IndieFlower, size = 35 },
{ text = "dolor", font = Enum.Font.Antique, size = 55 },
{ text = "sit", font = Enum.Font.SpecialElite, size = 65 },
{ text = "amet", font = Enum.Font.FredokaOne, size = 40 },
}
-- Create an automatically-sized parent frame
local parentFrame = Instance.new("Frame")
parentFrame.AutomaticSize = Enum.AutomaticSize.XY
parentFrame.BackgroundColor3 = Color3.fromRGB(90, 90, 90)
parentFrame.Size = UDim2.fromOffset(25, 100)
parentFrame.Position = UDim2.fromScale(0.1, 0.1)
parentFrame.Parent = script.Parent
-- Add a list layout
local listLayout = Instance.new("UIListLayout")
listLayout.Padding = UDim.new(0, 5)
listLayout.Parent = parentFrame
-- Set rounded corners and padding for visual aesthetics
local roundedCornerParent = Instance.new("UICorner")
roundedCornerParent.Parent = parentFrame
local uiPaddingParent = Instance.new("UIPadding")
uiPaddingParent.PaddingTop = UDim.new(0, 5)
uiPaddingParent.PaddingLeft = UDim.new(0, 5)
uiPaddingParent.PaddingRight = UDim.new(0, 5)
uiPaddingParent.PaddingBottom = UDim.new(0, 5)
uiPaddingParent.Parent = parentFrame
for i = 1, #labelArray do
-- Create an automatically-sized text label from array
local childLabel = Instance.new("TextLabel")
childLabel.AutomaticSize = Enum.AutomaticSize.XY
childLabel.Size = UDim2.fromOffset(75, 15)
childLabel.Text = labelArray[i]["text"]
childLabel.Font = labelArray[i]["font"]
childLabel.TextSize = labelArray[i]["size"]
childLabel.TextColor3 = Color3.new(1, 1, 1)
childLabel.Parent = parentFrame
-- Visual aesthetics
local roundedCorner = Instance.new("UICorner")
roundedCorner.Parent = childLabel
local uiPadding = Instance.new("UIPadding")
uiPadding.PaddingTop = UDim.new(0, 5)
uiPadding.PaddingLeft = UDim.new(0, 5)
uiPadding.PaddingRight = UDim.new(0, 5)
uiPadding.PaddingBottom = UDim.new(0, 5)
uiPadding.Parent = childLabel
task.wait(2)
end
BackgroundColor3
Bu özellik, bir GuiObject arka planının rengini (doldurma rengi) belirler.Elemanınızda metin varsa, örneğin bir TextBox , TextButton veya TextLabel , arka planınızın metin rengiyle aynı olduğundan emin olun.
Arka planın görsel özelliklerini belirleyen bir diğer özellik GuiObject.BackgroundTransparency ; bu 1 olarak ayarlanırsa, arka plan veya sınır renderlanmayacaktır.
Ayrıca bakın BorderColor3 .
Kod Örnekleri
This code sample causes a parent Frame to loop through all colors of the rainbow using Color3.fromHSV.
-- Put this code in a LocalScript in a Frame
local frame = script.Parent
while true do
for hue = 0, 255, 4 do
-- HSV = hue, saturation, value
-- If we loop from 0 to 1 repeatedly, we get a rainbow!
frame.BorderColor3 = Color3.fromHSV(hue / 256, 1, 1)
frame.BackgroundColor3 = Color3.fromHSV(hue / 256, 0.5, 0.8)
task.wait()
end
end
BackgroundTransparency
Bu özellik, GuiObject arka planının ve sınırının saydamlığını belirler.Bununla birlikte, GUI bir TextBox , TextButton veya TextLabel ise, metin saydamlığı belirlenir TextBox.TextTransparency , TextButton.TextTransparency ve TextLabel.TextTransparency ; metin saydamlığı ayrıca belirlenir.
Bu özellik 1 olarak ayarlanırsa, arka plan ve sınır çizilmeyecek ve GUI arka planı tamamen saydam olacaktır.
BorderColor3
GuiObject dikdörtgen sınırın rengini belirler (aynı zamanda çizgi rengi olarak da bilinir).Bu, nesnenin GuiObject.BackgroundColor3 'sinden ayrıdır.Eşyanın sınırını göremeyeceksiniz, eğer GuiObject.BorderSizePixel özellik 0 olarak ayarlanırsa.
Not that the UIStroke component allows for daha gelişmiş sınır etkileri.
Kod Örnekleri
This code sample causes the border of a parent GuiObject to highlight when the user hovers their mouse over the element.
-- Put me inside some GuiObject, preferrably an ImageButton/TextButton
local button = script.Parent
local function onEnter()
button.BorderSizePixel = 2
button.BorderColor3 = Color3.new(1, 1, 0) -- Yellow
end
local function onLeave()
button.BorderSizePixel = 1
button.BorderColor3 = Color3.new(0, 0, 0) -- Black
end
-- Connect events
button.MouseEnter:Connect(onEnter)
button.MouseLeave:Connect(onLeave)
-- Our default state is "not hovered"
onLeave()
BorderMode
Bu özellik, GuiObject sınırının aynı adın envanterini kullanarak boyutlarına göre nasıl düzenleneceğini belirler, Enum.BorderMode .
Not that UIStroke bu özelliği geçersiz kılabilir ve daha gelişmiş sınır etkilerine izin verebilir.
BorderSizePixel
Bu özellik, GuiObject sınırının piksellerde ne kadar geniş olduğunu belirler. Bu değeri 0 olarak ayarlamak, sınırı tamamen devre dışı bırakır.
Not that UIStroke bu özelliği geçersiz kılabilir ve daha gelişmiş sınır etkilerine izin verebilir.
Kod Örnekleri
This code sample causes the border of a parent GuiObject to highlight when the user hovers their mouse over the element.
-- Put me inside some GuiObject, preferrably an ImageButton/TextButton
local button = script.Parent
local function onEnter()
button.BorderSizePixel = 2
button.BorderColor3 = Color3.new(1, 1, 0) -- Yellow
end
local function onLeave()
button.BorderSizePixel = 1
button.BorderColor3 = Color3.new(0, 0, 0) -- Black
end
-- Connect events
button.MouseEnter:Connect(onEnter)
button.MouseLeave:Connect(onLeave)
-- Our default state is "not hovered"
onLeave()
ClipsDescendants
Bu özellik, GuiObject ın dışında yuvarlanıp (görünmez hale gelecek) düşen GUI öğelerinin herhangi bir kısmını kırpıp kırpmayacağını belirler; aksi takdirde kare dışında görünecek.
Bu özellik tarafından desteklenmediğine dikkat edin Rotation .Bu veya herhangi bir ata GUI'nin sıfır olmayan bir özelliği varsa, bu özellik göz ardı edilir ve soyundaki GUI öğeleri bu özelliğin değerine rağmen görüntülenir.
GuiState
Oyuncunun parmağı basıldığında ve GuiObject üzerinde tutulduğunda, GuiState ın GuiObject 'i Press olarak ayarlanacaktır.Benzer şekilde, oyuncunun parmağı 'dan serbest bırakıldığında, ın 'ı kapatılacak ve kapalı olduğunda, 'ın 'ı ayarlanacaktır.
Interactable
GuiButton ile etkileşime girilebilir olup olmadığını veya GuiState 'nin değişip değişmediğini belirler, ya da GuiObject 'nin değişip değişmediği.
Bir GuiButton :
- ayarı üzerinde ayarlanırsa, artık basılamaz veya tıklanamaz ve sürekli olarak olarak ayarlanır.
- ayarı üzerinde ayarlanırsa, yeniden normal davranacak ve normal davranacaktır.
Bir GuiObject :
- ayarının üzerinde ayarlanması, sürekli olarak olarak ayarlanacaktır.
- ayarı üzerinde ayarlanırsa, yeniden normal davranacaktır.
LayoutOrder
Bu özellik, GuiObject kullanırken sıralama düzenini kontrol eder UIGridStyleLayout (örneğin UIListLayout veya UIPageLayout ) ile SortOrder ayarlanır Enum.SortOrder.LayoutOrder .Nesne bir kardeş UI düzeni yapısına sahip değilse işlevselliği yoktur.
GuiObjects daha düşük değerlerin daha yüksek değerlerden öncelikli olduğu artan sıralamada sıralanır.Eşit değerlere sahip nesneler, eklenmiş oldukları sıraya geri döner.
Gelecekte iki mevcut öğe arasında bir öğe eklemek zorunda kalacağınızdan emin değilseniz, 100 ( 0 , 100 , 200 , vb.) çarpanlarını kullanmak iyi bir uygulamadır).Bu, diğer elemanlar arasında sipariş edilen elemanlar için kullanabileceğiniz geniş bir düzen sıralama değeri boşluğu sağlar.
Ayrıca bakın ZIndex nesnenin renderleme sırasını sıralamak yerine sıralama düzenini belirleyen.
NextSelectionDown
Bu özellik, kullanıcı oyun kolu seçicisini aşağıya hareket ettirdiğinde GuiObject seçilen değeri ayarlar gamepad.Bu özellik boşsa, oyun kolu aşağıya hareket ettirmek seçilen GUI'yi değiştirmeyecektir.
Oyun kolu seçicisini aşağıya taşımak, GUI değilse GuiService.SelectedObject olmadığı sürece bu nesneye Selectable ayarlar.Bu özelliğin bir GUI öğesine ayarlanabileceğini unutmayın, örneğin Selectable olmasa bile, bir GUI'nin seçilebilir özellik değeri beklediğiniz davranışla eşleşmelidir.
Ayrıca bakınız NextSelectionUp , NextSelectionLeft ve NextSelectionRight .
Kod Örnekleri
This example demonstrates how to enable Gamepad navigation through a grid of GuiObject|GUI elements without manually having to connect the GuiObject.NextSelectionUp, GuiObject.NextSelectionDown, and GuiObject|NextSelectionRight, and GuiObject.NextSelectionLeft properties for every element in the grid.
Note that this code sample assumes your UIGridLayout is sorted by name, where elements are named in successive numerical order.
The code relies on this to set the NextSelection properties for all GuiObjects in the same level as the UIGridLayout. In our example, the UIGridLayoutObject and GUI elements within the grid are all children of a Frame named "Container". The code gets the children of "Container" and loops through each child. Children that are not GuiObjects are ignored. For each GUI element, the code attempts to assigned the NextSelection properties using the following logic:
- Starting with 1, the name of all GUI elements match their position in the grid
- Left: The item to the left will always be numbered 1 less than the current element
- Right: The item to the left will always be numbered 1 more than the current element
- Up: The item above (up) will always be number of GUIs in a row 1 less than the current element
- Down: The item below (down) will always be the number of GUIs in a row more than the current element This logic also allows for the GUI elements at the begging and end of rows (excluding the first and last element) to wrap around to the next and previous rows. If an element doesn't exist to the left, right, up, or down, the NextSelection will remain nil and moving the Gamepad selector in the direction will not change the selected GUI.
This example also contains code to test the grid using the arrow keys (Up, Down, Left, Right) of your keyboard instead of a gamepad, just in case you don't have a gamepad to test with. This portion of code initially selects the element named "1" by assigning it to the GuiService.SelectedObject property.
-- Setup the Gamepad selection grid using the code below
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Left edge
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Right edge
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Above
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Below
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Test the Gamepad selection grid using the code below
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
NextSelectionLeft
Bu özellik, kullanıcı oyun kolu seçicisini sola taşıdığında seçilen değeri ayarlar.Bu özellik boşsa, oyun kolu sola taşımak seçilen arayüzü değiştirmeyecektir.
Oyun kolu seçicisini sola taşımak, GUI değilse GuiService.SelectedObject bu nesneye şimdiye kadar Selectable koyar.Bu özelliğin bir GUI öğesine ayarlanabileceğini unutmayın, örneğin Selectable olmasa bile, bir GUI'nin seçilebilir özellik değeri beklediğiniz davranışla eşleşmelidir.
Ayrıca bakınız NextSelectionUp , NextSelectionDown ve NextSelectionRight .
Kod Örnekleri
This example demonstrates how to enable Gamepad navigation through a grid of GuiObject|GUI elements without manually having to connect the GuiObject.NextSelectionUp, GuiObject.NextSelectionDown, and GuiObject|NextSelectionRight, and GuiObject.NextSelectionLeft properties for every element in the grid.
Note that this code sample assumes your UIGridLayout is sorted by name, where elements are named in successive numerical order.
The code relies on this to set the NextSelection properties for all GuiObjects in the same level as the UIGridLayout. In our example, the UIGridLayoutObject and GUI elements within the grid are all children of a Frame named "Container". The code gets the children of "Container" and loops through each child. Children that are not GuiObjects are ignored. For each GUI element, the code attempts to assigned the NextSelection properties using the following logic:
- Starting with 1, the name of all GUI elements match their position in the grid
- Left: The item to the left will always be numbered 1 less than the current element
- Right: The item to the left will always be numbered 1 more than the current element
- Up: The item above (up) will always be number of GUIs in a row 1 less than the current element
- Down: The item below (down) will always be the number of GUIs in a row more than the current element This logic also allows for the GUI elements at the begging and end of rows (excluding the first and last element) to wrap around to the next and previous rows. If an element doesn't exist to the left, right, up, or down, the NextSelection will remain nil and moving the Gamepad selector in the direction will not change the selected GUI.
This example also contains code to test the grid using the arrow keys (Up, Down, Left, Right) of your keyboard instead of a gamepad, just in case you don't have a gamepad to test with. This portion of code initially selects the element named "1" by assigning it to the GuiService.SelectedObject property.
-- Setup the Gamepad selection grid using the code below
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Left edge
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Right edge
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Above
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Below
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Test the Gamepad selection grid using the code below
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
NextSelectionRight
Bu özellik, kullanıcı sağa GuiObject seçicisini taşıdığında seçilen özellik değerini ayarlar.Bu özellik boşsa, oyun kolu sağa taşımak seçilen arayüzü değiştirmeyecektir.
Oyun kolu seçicisini sağa taşımak, GUI değilse GuiService.SelectedObject bu nesneye çevirir Selectable .Bu özelliğin bir GUI öğesine ayarlanabileceğini unutmayın, örneğin Selectable olmasa bile, bir GUI'nin seçilebilir özellik değeri beklediğiniz davranışla eşleşmelidir.
Ayrıca bakınız NextSelectionUp , NextSelectionDown ve NextSelectionLeft .
Kod Örnekleri
This example demonstrates how to enable Gamepad navigation through a grid of GuiObject|GUI elements without manually having to connect the GuiObject.NextSelectionUp, GuiObject.NextSelectionDown, and GuiObject|NextSelectionRight, and GuiObject.NextSelectionLeft properties for every element in the grid.
Note that this code sample assumes your UIGridLayout is sorted by name, where elements are named in successive numerical order.
The code relies on this to set the NextSelection properties for all GuiObjects in the same level as the UIGridLayout. In our example, the UIGridLayoutObject and GUI elements within the grid are all children of a Frame named "Container". The code gets the children of "Container" and loops through each child. Children that are not GuiObjects are ignored. For each GUI element, the code attempts to assigned the NextSelection properties using the following logic:
- Starting with 1, the name of all GUI elements match their position in the grid
- Left: The item to the left will always be numbered 1 less than the current element
- Right: The item to the left will always be numbered 1 more than the current element
- Up: The item above (up) will always be number of GUIs in a row 1 less than the current element
- Down: The item below (down) will always be the number of GUIs in a row more than the current element This logic also allows for the GUI elements at the begging and end of rows (excluding the first and last element) to wrap around to the next and previous rows. If an element doesn't exist to the left, right, up, or down, the NextSelection will remain nil and moving the Gamepad selector in the direction will not change the selected GUI.
This example also contains code to test the grid using the arrow keys (Up, Down, Left, Right) of your keyboard instead of a gamepad, just in case you don't have a gamepad to test with. This portion of code initially selects the element named "1" by assigning it to the GuiService.SelectedObject property.
-- Setup the Gamepad selection grid using the code below
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Left edge
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Right edge
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Above
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Below
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Test the Gamepad selection grid using the code below
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
NextSelectionUp
Bu özellik, kullanıcı oyun kolu seçicisini yukarı hareket ettirdiğinde seçilen değeri ayarlar.Bu özellik boşsa, oyun kolu yukarı hareket ettirmek seçilen GUI'yi değiştirmeyecektir.
Oyun kolu seçicisinin yukarıya taşınması, GUI değilse GuiService.SelectedObject olmadığı sürece bu nesneye Selectable atar.Bu özelliğin bir GUI öğesine ayarlanabileceğini unutmayın, örneğin Selectable olmasa bile, bir GUI'nin seçilebilir özellik değeri beklediğiniz davranışla eşleşmelidir.
Ayrıca bakınız NextSelectionDown , NextSelectionLeft , NextSelectionRight .
Kod Örnekleri
This example demonstrates how to enable Gamepad navigation through a grid of GuiObject|GUI elements without manually having to connect the GuiObject.NextSelectionUp, GuiObject.NextSelectionDown, and GuiObject|NextSelectionRight, and GuiObject.NextSelectionLeft properties for every element in the grid.
Note that this code sample assumes your UIGridLayout is sorted by name, where elements are named in successive numerical order.
The code relies on this to set the NextSelection properties for all GuiObjects in the same level as the UIGridLayout. In our example, the UIGridLayoutObject and GUI elements within the grid are all children of a Frame named "Container". The code gets the children of "Container" and loops through each child. Children that are not GuiObjects are ignored. For each GUI element, the code attempts to assigned the NextSelection properties using the following logic:
- Starting with 1, the name of all GUI elements match their position in the grid
- Left: The item to the left will always be numbered 1 less than the current element
- Right: The item to the left will always be numbered 1 more than the current element
- Up: The item above (up) will always be number of GUIs in a row 1 less than the current element
- Down: The item below (down) will always be the number of GUIs in a row more than the current element This logic also allows for the GUI elements at the begging and end of rows (excluding the first and last element) to wrap around to the next and previous rows. If an element doesn't exist to the left, right, up, or down, the NextSelection will remain nil and moving the Gamepad selector in the direction will not change the selected GUI.
This example also contains code to test the grid using the arrow keys (Up, Down, Left, Right) of your keyboard instead of a gamepad, just in case you don't have a gamepad to test with. This portion of code initially selects the element named "1" by assigning it to the GuiService.SelectedObject property.
-- Setup the Gamepad selection grid using the code below
local container = script.Parent:FindFirstChild("Container")
local grid = container:GetChildren()
local rowSize = container:FindFirstChild("UIGridLayout").FillDirectionMaxCells
for _, gui in pairs(grid) do
if gui:IsA("GuiObject") then
local pos = gui.Name
-- Left edge
gui.NextSelectionLeft = container:FindFirstChild(pos - 1)
-- Right edge
gui.NextSelectionRight = container:FindFirstChild(pos + 1)
-- Above
gui.NextSelectionUp = container:FindFirstChild(pos - rowSize)
-- Below
gui.NextSelectionDown = container:FindFirstChild(pos + rowSize)
end
end
-- Test the Gamepad selection grid using the code below
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
GuiService.SelectedObject = container:FindFirstChild("1")
function updateSelection(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
local key = input.KeyCode
local selectedObject = GuiService.SelectedObject
if not selectedObject then
return
end
if key == Enum.KeyCode.Up then
if not selectedObject.NextSelectionUp then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Down then
if not selectedObject.NextSelectionDown then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Left then
if not selectedObject.NextSelectionLeft then
GuiService.SelectedObject = selectedObject
end
elseif key == Enum.KeyCode.Right then
if not selectedObject.NextSelectionRight then
GuiService.SelectedObject = selectedObject
end
end
end
end
UserInputService.InputBegan:Connect(updateSelection)
Position
Bu özellik, bir GuiObject piksel ve skalar konumu kullanarak nesnenin UDim2 etrafında konumlandırılır. Konum, nesnenin GuiObject.AnchorPoint etrafında döndürülür.
Eğer varsa, küçültme pozisyonu ebeveyn GUI öğesinin boyutuna göre değildir.The scalar position is relative to the size of the parent GUI element, if any.
UDim2 değerinin piksel bölümleri, ebeveyn GUI'nin boyutuna rağmen aynıdır.Değerler, nesnenin pikseldeki konumunu temsil eder.Bir nesnenin gerçek piksel konumu GuiBase2d.AbsolutePosition özelliğinden okunabilir.
Rotation
Bu özellik, GuiObject döndürülmesi gereken derece sayısını belirler.Döndürme, nesnenin merkezine göre mutlaktır, değil , yani dönüş noktasını değiştiremezsiniz.Ayrıca, bu özellik ClipsDescendants ile uyumlu değildir.
Selectable
Bu özellik, bir oyun kolu kullanarak GUI'leri gezarken GuiObject seçilebilecek olup olmadığını belirler.
Bu özellik true ise, bir GUI seçilebilir. Bir GUI'yi seçmek ayrıca GuiService.SelectedObject özelliğini o nesneye ayarlar.
Bunun false , GUI seçilemez.Ancak, bir GUI seçildiğinde bunu false olarak ayarlamak, onu seçimi kaldırmayacak veya GuiService.SelectedObject özelliğinin değerini değiştirmeyecektir.
GuiObject.SelectionGained ve GuiObject.SelectionLost eklemek, eleman için ateş etmeyecektir. Bir GuiObject'i seçimi kaldırmak için GuiService.SelectedObject özelliğini değiştirmelisiniz.
Bu özellik, bir GUI'nin bu özellik gibi özelliklerle birkaç GUI'ye bağlandığında yararlıdır GuiObject.NextSelectionUp , GuiObject.NextSelectionDown , NextSelectionRight veya NextSelectionLeft .Oyun kolu GUI'yi seçemesinin engellenmesi için tüm özellikleri değiştirmek yerine, seçilebilir özelliğini geçici olarak devre dışı bırakarak seçilmesini engelleyebilirsiniz.Sonra, oyun kolu seçicisinin GUI'yi seçebilmesini istediğinizde, seçilebilir özelliğini yeniden etkinleştirin.
Kod Örnekleri
The example below offers a simple demonstration on how to use the GuiObject.Selectable property to limit when a GUI element can be selected by the Gamepad navigator.
When a TextBox has gains focus, it can be selected. However, when a TextBox loses focus it can no longer be selected.
Although this is a simple demonstration, the property can also be used to prevent the navigator from selecting UI elements that exist for cosmetic rather than functional purposes. For instance, while the buttons on a menu screen should be selectable, the title image should not be.
local GuiService = game:GetService("GuiService")
local textBox = script.Parent
local function gainFocus()
textBox.Selectable = true
GuiService.SelectedObject = textBox
end
local function loseFocus(_enterPressed, _inputObject)
GuiService.SelectedObject = nil
textBox.Selectable = false
end
-- The FocusLost and FocusGained event will fire because the textBox
-- is of type TextBox
textBox.Focused:Connect(gainFocus)
textBox.FocusLost:Connect(loseFocus)
SelectionImageObject
Bu özellik, oyun konsolları için kullanılan varsayılan seçim süslemesini geçersiz kılar.
Seçilen SelectionImageObject üzerine seçilen GuiObject ile görüntünün Size uzerine yerleştirildiğini unutmayın.En iyi sonuçlar için, nesnenin seçilen eleman üzerinde doğru ölçeklendiğinden emin olmak için özel ölçek değerleriyle ölçeklendirilmesi gerekir, böylece nesne doğru ölçeklendirilir.
Bir SelectionImageObject unsurunu değiştirmek, sadece bir GuiObject elemanını etkiler. Tüm bir kullanıcının GUI öğelerini etkilemek için PlayerGui.SelectionImageObject özelliğini ayarla.
Kullanıcı tarafından hangi GUI öğesi seçildiğini belirlemek veya ayarlamak için, GuiService.SelectedObject özelliğini kullanabilirsiniz.Oyuncu farklı GUI öğelerini seçmek için oyun kolu kullanır ve NextSelectionUp , NextSelectionDown , NextSelectionLeft ve NextSelectionRight etkinliklerini çağırır.
SelectionOrder
Daha düşük SeçimSırasına sahip GuiObjectler, oyun konsolu seçimine başlarken veya bir atadan GuiService:Select() çağrırken daha önce daha yüksek SeçimSırasına sahip GuiObjectler seçilir.Bu özellik yönlü navigasyonu etkilemez.Varsayılan değer 0'dir.
Size
Bu özellik, bir GuiObject ölçek ve piksel boyutunu bir UDim2 kullanarak belirler.
Eğer varsa, ölçeksel boyut ebeveyn GUI öğesinin boyutuna göre değildir.The scalar size is relative to the size of the parent GUI element, if any.
UDim2 değerinin piksel bölümleri, ebeveyn GUI'nin boyutuna rağmen aynıdır.Değerler, nesnenin piksel boyutunu temsil eder.Bir nesnenin gerçek piksel boyutu GuiBase2d.AbsoluteSize özelliğinden okunabilir.
Eğer GuiObject 'nin bir ebeveyni varsa, her bir eksen boyunca büyüklüğü de ebeveynin SizeConstraint 'sı tarafından etkilenir.
Kod Örnekleri
This code sample allows you to create a simple color-changing health bar using two nested Frames. Paste this into a LocalScript on the inner frame.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Paste script into a LocalScript that is
-- parented to a Frame within a Frame
local frame = script.Parent
local container = frame.Parent
container.BackgroundColor3 = Color3.new(0, 0, 0) -- black
-- This function is called when the humanoid's health changes
local function onHealthChanged()
local human = player.Character.Humanoid
local percent = human.Health / human.MaxHealth
-- Change the size of the inner bar
frame.Size = UDim2.new(percent, 0, 1, 0)
-- Change the color of the health bar
if percent < 0.1 then
frame.BackgroundColor3 = Color3.new(1, 0, 0) -- black
elseif percent < 0.4 then
frame.BackgroundColor3 = Color3.new(1, 1, 0) -- yellow
else
frame.BackgroundColor3 = Color3.new(0, 1, 0) -- green
end
end
-- This function runs is called the player spawns in
local function onCharacterAdded(character)
local human = character:WaitForChild("Humanoid")
-- Pattern: update once now, then any time the health changes
human.HealthChanged:Connect(onHealthChanged)
onHealthChanged()
end
-- Connect our spawn listener; call it if already spawned
player.CharacterAdded:Connect(onCharacterAdded)
if player.Character then
onCharacterAdded(player.Character)
end
SizeConstraint
Bu özellik, GuiObject üzerine dayanacak Size eksenleri ayarlar, ebeveynin büyüklüğüne göre.
Bu özellik, bir ebeveyn nesnenin genişliği veya yüksekliği ile ölçeklenecek GUI nesneleri oluşturmak için yararlıdır, ancak her ikisi de değil, nesnenin açı oranını etkili bir şekilde korur.
Visible
Bu özellik, GuiObject ve onun soyundakilerinin görüntülenmesi olacak.
Bir GuiObject 'in bileşenlerinin görüntülenmesi, GuiObject.BackgroundTransparency , TextLabel.TextTransparency ve ImageLabel.ImageTransparency gibi saydamlık özellikleri aracılığıyla bireysel olarak kontrol edilebilir.
Bu özellik olduğunda, , ve gibi düzen yapıları tarafından göz ardı edilecektir.Diğer bir deyişle, öğenin düzende diğer elementler tarafından işgal edeceği alan başka öğeler tarafından kullanılır.
Kod Örnekleri
This code sample adds open/close functionality to a Window UI. Paste as a LocalScript that is a sibling of a Frame named Window, a TextButton/ImageButton named Window, and a TextButton/ImageButton within the Window called Close.
local gui = script.Parent
local window = gui:WaitForChild("Window")
local toggleButton = gui:WaitForChild("ToggleWindow")
local closeButton = window:WaitForChild("Close")
local function toggleWindowVisbility()
-- Flip a boolean using the `not` keyword
window.Visible = not window.Visible
end
toggleButton.Activated:Connect(toggleWindowVisbility)
closeButton.Activated:Connect(toggleWindowVisbility)
ZIndex
Bu özellik, bir GuiObject 'nin diğerlerine göre hangi sırayla görüntülenmesi gerektiğini belirler.
Varsayılan olarak, GuiObjects daha düşük ZIndex değerlere sahip olanlar daha yüksek değerlere sahip olanlara göre sıralanarak renderlanır.Görüntü oluşturma sırasını ScreenGui , SurfaceGui veya BillboardGui değiştirerek değiştirebilirsiniz çıkış değerinin değiştirilmesiyle çıkış ZIndexBehavior .
Gelecekte iki mevcut öğe arasında bir öğe eklemek zorunda kalacağınızdan emin değilseniz, 100 ( 0 , 100 , 200 , vb.) çarpanlarını kullanmak iyi bir uygulamadır).Bu, diğer elemanlar arasında yerleştirilen elemanlar için kullanabileceğiniz geniş bir görüntü düzeni değeri boşluğu sağlar.
Ayrıca bakın LayoutOrder , bir düzenleme yapısı kullanılarak bir sıralama düzeninin GuiObject sırasını kontrol eden, örneğin UIListLayout veya UIGridLayout gibi bir düzenleme yapısı kullanıldığında.
Yöntemler
TweenPosition
Bir GUI'yi belirtilen sürede belirtilen UDim2 ve Enum.EasingDirection ve Enum.EasingStyle kullanarak yeni bir pozisyona pürüzsüz bir şekilde taşır.
Bu işlev, genç oynayıp oynamayacağını döndürecektir.Başka bir genç oyuncu GuiObject üzerinde hareket ediyorsa ve geçersizlik parametri false ise oynatmayacaktır.
Ayrıca bakın GuiObject:TweenSize() ve GuiObject:TweenSizeAndPosition() .
Parametreler
GUI'nin hareket etmesi gereken yer.
GUI'yi son konuma kolaylaştırma yönü.
GUI'yi son konuma kolaylaştırmak için kullanılan stil.
Ne kadar süre, saniyeler içinde, genç tamamlanmalıdır.
Genç, devam eden bir gençliği geçersiz kılacak mı.
Gençlik bitirildiğinde çalıştırılacak bir geri arama işlevi.
Dönüşler
Genç oynayacak mı.
Kod Örnekleri
This code sample demonstrates a more involved usage of TweenPosition by detecting when the tween completes/cancels by defining a callback function. It also prints whether the tween will play.
local START_POSITION = UDim2.new(0, 0, 0, 0)
local GOAL_POSITION = UDim2.new(1, 0, 1, 0)
local guiObject = script.Parent
local function callback(state)
if state == Enum.TweenStatus.Completed then
print("The tween completed uninterrupted")
elseif state == Enum.TweenStatus.Canceled then
print("Another tween cancelled this one")
end
end
-- Initialize the GuiObject position, then start the tween:
guiObject.Position = START_POSITION
local willPlay = guiObject:TweenPosition(
GOAL_POSITION, -- Final position the tween should reach
Enum.EasingDirection.In, -- Direction of the easing
Enum.EasingStyle.Sine, -- Kind of easing to apply
2, -- Duration of the tween in seconds
true, -- Whether in-progress tweens are interrupted
callback -- Function to be callled when on completion/cancelation
)
if willPlay then
print("The tween will play")
else
print("The tween will not play")
end
TweenSize
Belirtilen süre kullanarak belirtilen GuiObject 'den yeni bir UDim2 'ye pürüzsüz bir şekilde yeniden boyutlandırır ve belirtilen Enum.EasingDirection ve Enum.EasingStyle kullanarak.
Bu işlev, genç oynayıp oynamayacağını döndürecektir.Normalde bu daima geri dönecek, ancak başka bir genç aktif olduğunda ve devre dışı bırakma ayarlanırsa dönecektir.
Ayrıca bakın GuiObject:TweenSize() ve GuiObject:TweenSizeAndPosition() .
Parametreler
GUI'nin yeniden boyutlandırması gereken boyut.
GUI'yi endSize 'e kolaylaştırma yönü.
UI'yi endSize ye kolaylaştırmak için kullanılan stil.
Ne kadar süre, saniyeler içinde, genç tamamlanmalıdır.
Genç, devam eden bir gençliği geçersiz kılacak mı.
Gençlik bitirildiğinde çalıştırılacak bir geri arama işlevi.
Dönüşler
Genç oynayacak mı.
Kod Örnekleri
This code sample demonstrates the usage of the GuiObject:TweenSize() function. It initiates an animation on the parent's GuiObject.Size property to UDim2.new(0.5, 0, 0.5, 0), which is half the GuiObject's parent size on both axes.
Additionally, it demonstrates how the callback parameter can be used to detect when the tween stops (whether it was cancelled by another tween or completed).
local guiObject = script.Parent
local function callback(didComplete)
if didComplete then
print("The tween completed successfully")
else
print("The tween was cancelled")
end
end
local willTween = guiObject:TweenSize(
UDim2.new(0.5, 0, 0.5, 0), -- endSize (required)
Enum.EasingDirection.In, -- easingDirection (default Out)
Enum.EasingStyle.Sine, -- easingStyle (default Quad)
2, -- time (default: 1)
true, -- should this tween override ones in-progress? (default: false)
callback -- a function to call when the tween completes (default: nil)
)
if willTween then
print("The GuiObject will tween")
else
print("The GuiObject will not tween")
end
TweenSizeAndPosition
Bir GUI'yi belirtilen sürede belirtilen ve kullanarak yeni bir boyuta ve konuma taşır ve yeniden boyutlandırır.
Bu işlev, genç oynayıp oynamayacağını döndürecektir.Normalde bu daima geri dönecek, ancak başka bir genç aktif olduğunda ve devre dışı bırakma ayarlanırsa dönecektir.
Ayrıca bakın GuiObject:TweenSize() ve GuiObject:TweenSizeAndPosition() .
Parametreler
GUI'nin yeniden boyutlandırması gereken boyut.
GUI'nin hareket etmesi gereken yer.
GUI'yi son boyuta ve son pozisyona kolaylaştırmak için yön.
GUI'yi son boyuta ve son pozisyona kolaylaştırmak için kullanılan stil.
Ne kadar süre, saniyeler içinde, genç tamamlanmalıdır.
Genç, devam eden bir gençliği geçersiz kılacak mı.
Gençlik bitirildiğinde çalıştırılacak bir geri arama işlevi.
Dönüşler
Genç oynayacak mı.
Kod Örnekleri
The below example would tween a Frame to the top left of the parent's size and resize it down to 0.
local frame = script.Parent.Frame
frame:TweenSizeAndPosition(UDim2.new(0, 0, 0, 0), UDim2.new(0, 0, 0, 0))
Etkinlikler
InputBegan
Bu olay, bir kullanıcı İnsan-Bilgisayar Arayüzü cihazı aracılığıyla etkileşime başladığında ateşlenir (Fare düğmesi aşağı, dokunma başlar, klavye düğmesi aşağı, vb.).
The UserInputService 'in benzer adlı bir etkinliği, belirli bir UI öğesine sınırlı değildir: UserInputService.InputBegan .
Bu olay oyun durumuna rağmen daima ateşlenecektir.
Ayrıca bakın GuiObject.InputEnded ve GuiObject.InputChanged .
Parametreler
Bir InputObject , type of input , state of input ve screen coordinates of the input gibi kullanıcı girişini sorgulamak için yararlı veriler içeren
Kod Örnekleri
The following example demonstrates one of many usage examples of handling user input from InputBegan depending on its type.
In order for this to work as expected, it must be placed in a LocalScript and a child of gui.
-- In order to use the InputBegan event, you must specify the GuiObject
local gui = script.Parent
-- A sample function providing multiple usage cases for various types of user input
local function inputBegan(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
end
gui.InputBegan:Connect(inputBegan)
InputChanged
Bu olay, bir kullanıcının bir İnsan-Bilgisayar Arayüzü cihazı aracılığıyla nasıl etkileşime girdiğini değiştirdiğinde ateşlenir (Mouse düğmes aşağı, dokunma başlar, klavye düğmesi aşağı, vb.).
The UserInputService 'in benzer adlı bir etkinliği, belirli bir UI öğesine sınırlı değildir: UserInputService.InputChanged .
Bu olay oyun durumuna rağmen daima ateşlenecektir.
Ayrıca bakın GuiObject.InputBegan ve GuiObject.InputEnded .
Parametreler
Bir InputObject , type of input , state of input ve screen coordinates of the input gibi kullanıcı girişini sorgulamak için yararlı veriler içeren
Kod Örnekleri
The following example demonstrates one of many usage examples of handling user input from InputChanged depending on its type.
In order for this to work as expected, it must be placed in a LocalScript and a child of gui.
local UserInputService = game:GetService("UserInputService")
local gui = script.Parent
local function printMovement(input)
print("Position:", input.Position)
print("Movement Delta:", input.Delta)
end
local function inputChanged(input)
if input.UserInputType == Enum.UserInputType.MouseMovement then
print("The mouse has been moved!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.MouseWheel then
print("The mouse wheel has been scrolled!")
print("Wheel Movement:", input.Position.Z)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.Thumbstick1 then
print("The left thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then
print("The right thumbstick has been moved!")
printMovement(input)
elseif input.KeyCode == Enum.KeyCode.ButtonL2 then
print("The pressure being applied to the left trigger has changed!")
print("Pressure:", input.Position.Z)
elseif input.KeyCode == Enum.KeyCode.ButtonR2 then
print("The pressure being applied to the right trigger has changed!")
print("Pressure:", input.Position.Z)
end
elseif input.UserInputType == Enum.UserInputType.Touch then
print("The user's finger is moving on the screen!")
printMovement(input)
elseif input.UserInputType == Enum.UserInputType.Gyro then
local _rotInput, rotCFrame = UserInputService:GetDeviceRotation()
local rotX, rotY, rotZ = rotCFrame:toEulerAnglesXYZ()
local rot = Vector3.new(math.deg(rotX), math.deg(rotY), math.deg(rotZ))
print("The rotation of the user's mobile device has been changed!")
print("Position", rotCFrame.p)
print("Rotation:", rot)
elseif input.UserInputType == Enum.UserInputType.Accelerometer then
print("The acceleration of the user's mobile device has been changed!")
printMovement(input)
end
end
gui.InputChanged:Connect(inputChanged)
InputEnded
GirişBitti etkinliği, bir kullanıcının İnsan-Bilgisayar Arayüzü cihazı üzerinden etkileşimini durdurduğunda ateşlenir (Mouse düğmes aşağı, dokunma başlar, klavye düğmes aşağı, vb.).
The UserInputService 'in benzer adlı bir etkinliği, belirli bir UI öğesine sınırlı değildir: UserInputService.InputEnded .
Bu olay oyun durumuna rağmen daima ateşlenecektir.
Ayrıca bakın GuiObject.InputBegan ve GuiObject.InputChanged .
Parametreler
Bir InputObject , Enum.UserInputType , Enum.UserInputState ve InputObject.Position gibi kullanıcı girişini sorgulamak için yararlı veriler içeren
Kod Örnekleri
The following example demonstrates one of many usage examples of handling user input from InputEnded depending on its type.
In order for this to work as expected, it must be placed in a LocalScript and a child of gui.
-- In order to use the InputChanged event, you must specify a GuiObject
local gui = script.Parent
-- A sample function providing multiple usage cases for various types of user input
local function inputEnded(input)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key has been released! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has been released at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button has been released on a gamepad! Button:", input.KeyCode)
end
end
gui.InputEnded:Connect(inputEnded)
MouseEnter
FareGir etkinliği, bir kullanıcının fareini bir GuiObject elemanına taşıdığında ateşlenir.
Lütfen bu olay tarafından geçirilen x ve y argümanlarına güvenmeyin, bir kullanıcının GUI'ye girdiğinde nerede olduğunu belirlemek için bir saçma yol olarak bu olay tarafından geçirilen ve argümanlarına güvenmeyin.Bu koordinatlar, fare aynı kenar üzerinden GUI'ye girdiğinde bile değişebilir - özellikle fare hızlı bir şekilde elemana girdiğinde.Bu, koordinatların olay ateşlendiğinde farelerin GUI'ye girdiği ana değil, farelerin konumunu gösterdiği gerçeğinden kaynaklanmaktadır.
Bu olay, GUI öğesi başka bir öğenin altında göründüğünde bile ateşlenir.
Bir kullanıcının mouse'unun bir GUI öğesini terk ettiğini izlemek istiyorsanız, GuiObject.MouseLeave etkinliğini kullanabilirsiniz.
Ayrıca bakın
Parametreler
Farenin X ekran koordinatı piksellere göre, ekranın sol üst kısmına göre.
Farenin Y ekran koordinatı piksellere göre, ekranın sol üst kısmına göre.
Kod Örnekleri
The following example prints the mouse location, in pixels, when it enters GUI element.
local guiObject = script.Parent
guiObject.MouseEnter:Connect(function(x, y)
print("The user's mouse cursor has entered the GuiObject at position", x, ",", y)
end)
MouseLeave
FareBırak etkinliği, bir kullanıcının fareini bir GuiObject elemanından çıkardığında ateşlenir.
Lütfen bu olay tarafından geçirilen x ve y argümanlarına güvenmeyin, kullanıcının GUI'den ayrıldığında nerede olduğunu belirlemek için bir saçma yol olarak bu olay tarafından geçirilen ve argümanlarına güvenmeyin.Bu koordinatlar, fare aynı kenar üzerinden GUI'yi terk ettiğinde bile değişebilir - özellikle fare öğeyi hızlı bir şekilde terk ettiğinde.Bu, koordinatların etkinlik ateşlendiğinde fareyi GUI'den terk ettiği ana göre pozisyonunu gösterdiği gerçeğinden kaynaklanmaktadır.
Bu olay, GUI öğesi başka bir öğenin altında göründüğünde bile ateşlenir.
Ayrıca bakın
Parametreler
Farenin X ekran koordinatı piksellere göre, ekranın sol üst kısmına göre.
Farenin Y ekran koordinatı piksellere göre, ekranın sol üst kısmına göre.
MouseMoved
Bir kullanıcı bir GuiObject elemanının içindeyken fareni hareket ettirdiğinde herhangi bir sırada ateş eder.Kullanıcının mouse'unun bir GUI öğesinin üzerinde olup olmadığına bakılmaksızın ateş eden Mouse.Move ile benzerdir.
Not, bu olay, fare konumu güncellendiğinde ateşlenir, bu nedenle taşınırken tekrar tekrar ateşlenecektir.
The x ve y argümanları, kullanıcının farenin güncellenmiş ekran koordinatlarını piksel olarak gösterir.Bunlar, global değişken olarak izleniyorsa, fareyi GUI, ekran ve delta üzerinde konumlandırmak için yararlı olabilir, çünkü önceki konumu takip ediliyorsa.
Aşağıdaki kod, kullanıcının mouse'unun bir GUI elemanına göre nasıl ofset edileceğini gösterir:
local Players = game:GetService("Players")
local CustomScrollingFrame = script.Parent
local SubFrame = CustomScrollingFrame:FindFirstChild("SubFrame")
local mouse = Players.LocalPlayer:GetMouse()
local function getPosition(X, Y)
local gui_X = CustomScrollingFrame.AbsolutePosition.X
local gui_Y = CustomScrollingFrame.AbsolutePosition.Y
local pos = Vector2.new(math.abs(X - gui_X), math.abs(Y - gui_Y - 36))
print(pos)
end
CustomScrollingFrame.MouseMoved:Connect(getPosition)
Bu olayın, kullanıcının fareleri bir GUI öğesine girdiğinde veya çıktığında aynı anda ateşlenmediğini unutmayın.Bu nedenle, x ve y argümanları GUI'nin kenarlarının koordinatlarına mükemmel bir şekilde eşleşmeyebilir.
Ayrıca bakın
Parametreler
Farenin X ekran koordinatı piksellere göre, ekranın sol üst kısmına göre.
Farenin Y ekran koordinatı piksellere göre, ekranın sol üst kısmına göre.
MouseWheelBackward
Tekerlek Geri etkinliği, bir kullanıcının fare tekerleğini GuiObject bir elemanın üzerinde olduğunda geriye doğru kaydırdığında ateşlenir.Kullanıcının mouse'unun bir GUI öğesinin üzerinde olup olmadığına bakılmaksızın ateş eden Mouse.WheelBackward ile benzerdir.
Bu olay sadece tekerleğin geri hareketinin bir göstergesi olarak ateşlenir.Bu, x ve y fare koordinat argümanlarının bu olayın sonucu olarak değişmeyeceği anlamına gelir.Bu koordinatlar sadece fare hareket ettiğinde değişir, ki bu GuiObject.MouseMoved etkinliği tarafından izlenebilir.
Ayrıca bakın
Parametreler
Farenin X ekran koordinatı piksellere göre, ekranın sol üst kısmına göre.
Farenin Y ekran koordinatı piksellere göre, ekranın sol üst kısmına göre.
MouseWheelForward
Tekerlekİleri etkinliği, bir kullanıcının fare tekerleğini GuiObject bir elemanın üzerinde olduğunda ileriye doğru kaydırdığında ateşlenir.Kullanıcının mouse'unun bir GUI öğesinin üzerinde olup olmadığına bakılmaksızın ateş eden Mouse.WheelForward ile benzerdir.
Bu olay sadece tekerleğin ileri hareketinin bir göstergesi olarak ateşlenir.Bu, X ve Y fare koordinat argümanlarının bu olayın sonucu olarak değişmeyeceği anlamına gelir.Bu koordinatlar sadece fare hareket ettiğinde değişir, ki bu GuiObject.MouseMoved etkinliği tarafından izlenebilir.
Ayrıca bakın
Parametreler
Farenin X ekran koordinatı piksellere göre, ekranın sol üst kısmına göre.
Kullanıcının fare koordinatı Y .
SelectionGained
Bu olay, Gamepad seçicisinin GuiObject üzerinde odaklanmaya başladığında ateşlenir.
Oyun konsolundan kontrol etmek istiyorsanız, GUI öğesine odaklanmayı bırakma seçeneklerini seçin, GuiObject.SelectionLost etkinliğini kullanabilirsiniz.
Bir GUI seçim odaklanması kazandığında, SelectedObject özelliğinin değeri de seçim kazananına değişir.Hangi GUI'nin seçildiğini belirlemek için, bu özelliğin değerini kontrol edin.
Kod Örnekleri
The following example prints a message when the user selects the object with a gamepad.
In order for this to work as expected, it must be placed in a LocalScript and a child of gui.
local guiObject = script.Parent
local function selectionGained()
print("The user has selected this button with a gamepad.")
end
guiObject.SelectionGained:Connect(selectionGained)
SelectionLost
Bu olay, Gamepad seçicisinin GuiObject üzerinde odaklanmayı bıraktığında ateşlenir.
Oyun konsolundan kontrol etmek istiyorsanız, GUI öğesine odaklanmaya başlar, GuiObject.SelectionGained etkinliğini kullanabilirsiniz.
Bir GUI seçim odaklarını kaybettiğinde, SelectionObject özelliğinin değeri ya nil ya da seçim odaklarını kazanan GUI öğesine değişir.Hangi GUI'nin seçildiğini belirlemek veya hiçbir GUI seçilmediğinde bu özelliğin değerini kontrol etmek için, bu özelliğin değerini kontrol edin.
Kod Örnekleri
The following example prints a message when the element has its focus lost on a gamepad.
In order for this to work as expected, it must be placed in a LocalScript and a child of gui.
local guiObject = script.Parent
local function selectionLost()
print("The user no longer has this selected with their gamepad.")
end
guiObject.SelectionLost:Connect(selectionLost)
TouchLongPress
Bu olay, oyuncu bir dokunma etkinleştirilmiş cihaz kullanarak UI öğesine parmak basıldıktan kısa bir süre sonra ateş eder.Harekete dahil olan parmakların mutlak ekran konumlarını tanımlayan bir tablo ile ateş eder Vector2 .Ayrıca, çok kez ateş eder: Enum.UserInputState.Begin kısa bir gecikme sonra, Enum.UserInputState.Change oyuncu parmağını hareket ettirirse ve son olarak Enum.UserInputState.End .Gecikme platforma bağlıdır; Studio'da bir saniyeden biraz daha uzundur.
Bu olay sadece bir parmağı gerektirdiğinden, bu olay, emülatör ve bir fare kullanarak Studio'da simüle edilebilir.
Parametreler
Hareketin durumunu tanımlayan bir Enum.UserInputState :
- Hareketin başlangıcında bir kez ateş etmeye başlayın (kısa gecikmeden sonra)
- Oyuncu parmağını basılı tutarken hareket ederse ateşleri değiştir
- Parmağını bıraktıklarında hareketin sonunda ateşleri bitirin.
Kod Örnekleri
This code sample allows the player to manipulate the screen position of some UI element, like a Frame, by holding down on the UI element for a brief moment. Then, the player moves their finger and releases. During the gesture the Frame is colored blue with a white outline.
local frame = script.Parent
frame.Active = true
local dragging = false
local basePosition
local startTouchPosition
local borderColor3
local backgroundColor3
local function onTouchLongPress(touchPositions, state)
if state == Enum.UserInputState.Begin and not dragging then
-- Start a drag
dragging = true
basePosition = frame.Position
startTouchPosition = touchPositions[1]
-- Color the frame to indicate the drag is happening
borderColor3 = frame.BorderColor3
backgroundColor3 = frame.BackgroundColor3
frame.BorderColor3 = Color3.new(1, 1, 1) -- White
frame.BackgroundColor3 = Color3.new(0, 0, 1) -- Blue
elseif state == Enum.UserInputState.Change then
local touchPosition = touchPositions[1]
local deltaPosition =
UDim2.new(0, touchPosition.X - startTouchPosition.X, 0, touchPosition.Y - startTouchPosition.Y)
frame.Position = basePosition + deltaPosition
elseif state == Enum.UserInputState.End and dragging then
-- Stop the drag
dragging = false
frame.BorderColor3 = borderColor3
frame.BackgroundColor3 = backgroundColor3
end
end
frame.TouchLongPress:Connect(onTouchLongPress)
TouchPan
Bu olay, dokunma etkinleştirilmiş bir cihaz kullanarak oyuncunun UI öğesine parmağını hareket ettirdiğinde ateşlenir.GuiObject.TouchSwipe önce kısa bir süre ateş eder ve GuiObject.TouchTap ile ateş etmez.Bu etkinlik, oyuncunun ekranda UI öğelerinin konumunu manipüle etmesine izin vermek için yararlıdır.
Bu olay, dokunma hareketine dahil olan parmakların nispi ekran konumlarını tanımlayan bir tablo ile ateş eder Vector2 .Ayrıca, çok kez ateş eder: Enum.UserInputState.Begin kısa bir gecikme sonra, Enum.UserInputState.Change oyuncu parmağını hareket ettirdiğinde, ve son olarak Enum.UserInputState.End ile.
Bu olay, emülatör ve bir fare kullanarak Studio'da simüle edilemez; ateşlemek için gerçek bir dokunma etkinleştirilmiş cihazınız olması gerekir.
Parametreler
Harekete dahil olan tüm parmakların konumunu gösteren Vector2 bir Luau dizesi, her biri hareketin tüm katılımcılarının konumunu gösterir
Tava hareketinin başlangıç noktasından ne kadar uzaklaştığını gösterir.
Hareketin her boyutta ne kadar hızlı yapıldığını gösterir.
Hareketin Enum.UserInputState kısmını gösterir.
Kod Örnekleri
This code sample is meant to be placed in a LocalScript within an inner Frame that is inside an outer Frame, or other GuiObject. It allows the player to manipulate the position of the inner frame by moving their finger on the outer frame.
local innerFrame = script.Parent
local outerFrame = innerFrame.Parent
outerFrame.BackgroundTransparency = 0.75
outerFrame.Active = true
outerFrame.Size = UDim2.new(1, 0, 1, 0)
outerFrame.Position = UDim2.new(0, 0, 0, 0)
outerFrame.AnchorPoint = Vector2.new(0, 0)
outerFrame.ClipsDescendants = true
local dragging = false
local basePosition
local function onTouchPan(_touchPositions, totalTranslation, _velocity, state)
if state == Enum.UserInputState.Begin and not dragging then
dragging = true
basePosition = innerFrame.Position
outerFrame.BackgroundTransparency = 0.25
elseif state == Enum.UserInputState.Change then
innerFrame.Position = basePosition + UDim2.new(0, totalTranslation.X, 0, totalTranslation.Y)
elseif state == Enum.UserInputState.End and dragging then
dragging = false
outerFrame.BackgroundTransparency = 0.75
end
end
outerFrame.TouchPan:Connect(onTouchPan)
TouchPinch
Bu olay, oyuncu dokunma etkinleştirilmiş bir cihaz kullanarak UI öğesine bir kıskaç veya çekme hareketi yapmak için iki parmağı kullandığında ateşlenir.Bir pinç iki veya daha fazla parmak birbirine daha yakın hareket ettiğinde ve bir çekme ayrıldığında gerçekleşir.Bu olay GuiObject.TouchPan ile birlikte ateşlenir.Bu etkinlik, oyuncunun ekranda UI öğelerinin ölçeğini (boyutunu) manipüle etmesine izin vermek için yararlıdır ve çoğunlukla yakınlaştırma özellikleri için kullanılır.
Bu olay, dokunma hareketine dahil olan parmakların nispi ekran konumlarını tanımlayan bir tablo ile ateş eder Vector2 .Ayrıca, çok kez ateş eder: Enum.UserInputState.Begin kısa bir gecikme sonra, Enum.UserInputState.Change oyuncu hareket sırasında bir parmağı hareket ettirdiğinde ve son olarak da Enum.UserInputState.End .Ölçeğin çarpan olarak kullanılması gerektiği belirtilmelidir .
Bu olay en az iki parmağı gerektirdiğinden, emülatör ve bir fare kullanarak Stüdyo'da simüle etmek mümkün değildir; gerçek bir dokunma etkinleştirilmiş cihazınız olmalıdır.
Parametreler
Luau bir Vector2 nesne düzeni, her biri pincer hareketine dahil olan tüm parmakların konumunu gösteren, her biri pincer hareketine dahil olan
Pinç hareketinin başlangıcından farkı gösteren bir yüzük hareketi. A float that indicates the difference from the beginning of the pinch gesture.
Kıskaç hareketinin ne kadar hızlı gerçekleştiğini gösteren bir yüzük. A float indicating how quickly the pinch gesture is happening.
Hareketin Enum.UserInputState kısmını gösterir.
Kod Örnekleri
This code sample is meant for a LocalScript within an inner Frame that is inside an outer Frame, or other GuiObject. It allows the player to scale the inner frame by performing a GuiObject.TouchPinch gesture on the outer frame.
local innerFrame = script.Parent
local outerFrame = innerFrame.Parent
outerFrame.BackgroundTransparency = 0.75
outerFrame.Active = true
outerFrame.Size = UDim2.new(1, 0, 1, 0)
outerFrame.Position = UDim2.new(0, 0, 0, 0)
outerFrame.AnchorPoint = Vector2.new(0, 0)
outerFrame.ClipsDescendants = true
local dragging = false
local uiScale = Instance.new("UIScale")
uiScale.Parent = innerFrame
local baseScale
local function onTouchPinch(_touchPositions, scale, _velocity, state)
if state == Enum.UserInputState.Begin and not dragging then
dragging = true
baseScale = uiScale.Scale
outerFrame.BackgroundTransparency = 0.25
elseif state == Enum.UserInputState.Change then
uiScale.Scale = baseScale * scale -- Notice the multiplication here
elseif state == Enum.UserInputState.End and dragging then
dragging = false
outerFrame.BackgroundTransparency = 0.75
end
end
outerFrame.TouchPinch:Connect(onTouchPinch)
TouchRotate
Bu olay, oyuncu dokunma etkinleştirilmiş bir cihaz kullanarak UI öğesine bir kıskaç veya çekme hareketi yapmak için iki parmağı kullandığında ateşlenir.Döndürme, iki parmak arasındaki çizginin açısı değiştiğinde gerçekleşir.Bu olay GuiObject.TouchPan ile birlikte ateşlenir.Bu etkinlik, oyuncunun ekranda UI öğelerinin dönüşünü manipüle etmesine izin vermek için yararlıdır.
Bu olay, dokunma hareketine dahil olan parmakların nispi ekran konumlarını tanımlayan bir tablo ile ateş eder Vector2 .Ayrıca, çok kez ateş eder: Enum.UserInputState.Begin kısa bir gecikme sonra, Enum.UserInputState.Change oyuncu hareket sırasında bir parmağı hareket ettirdiğinde ve son olarak da Enum.UserInputState.End .
Bu olay en az iki parmağı gerektirdiğinden, emülatör ve bir fare kullanarak Stüdyo'da simüle edilemez; gerçek bir dokunma etkinleştirilmiş cihazınız olmalıdır.
Parametreler
Harekete dahil olan tüm parmakların konumunu gösteren Vector2 bir Luau dizesi, her biri hareketin tüm katılımcılarının konumunu gösterir
Hareketin başından beri dönüşün ne kadar gittiğini gösteren bir yüzde. A float indicating how much the rotation has gone from the start of the gesture.
Hareketin ne kadar hızlı yapıldığını gösteren bir yüzük.
Hareketin Enum.UserInputState kısmını gösterir.
Kod Örnekleri
This code sample is meant for a LocalScript within an inner Frame that is inside an outer Frame, or other GuiObject. It allows the player to rotate the inner frame by performing a GuiObject.TouchRotate gesture on the outer frame.
local innerFrame = script.Parent
local outerFrame = innerFrame.Parent
outerFrame.BackgroundTransparency = 0.75
outerFrame.Active = true
outerFrame.Size = UDim2.new(1, 0, 1, 0)
outerFrame.Position = UDim2.new(0, 0, 0, 0)
outerFrame.AnchorPoint = Vector2.new(0, 0)
outerFrame.ClipsDescendants = true
local dragging = false
local baseRotation = innerFrame.Rotation
local function onTouchRotate(_touchPositions, rotation, _velocity, state)
if state == Enum.UserInputState.Begin and not dragging then
dragging = true
baseRotation = innerFrame.Rotation
outerFrame.BackgroundTransparency = 0.25
elseif state == Enum.UserInputState.Change then
innerFrame.Rotation = baseRotation + rotation
elseif state == Enum.UserInputState.End and dragging then
dragging = false
outerFrame.BackgroundTransparency = 0.75
end
end
outerFrame.TouchRotate:Connect(onTouchRotate)
TouchSwipe
Bu olay, oyuncu dokunma etkinleştirilmiş bir cihaz kullanarak UI öğesine kaydırma hareketi yaptığında ateşlenir.Hareketin yönü (Yukarı, Aşağı, Sola veya Sağa) ve harekete dahil dokunma noktalarının sayısı ile ateş eder.Kaydırma hareketleri genellikle mobil UI'lerde sekmeleri değiştirmek için kullanılır.
Bu olay sadece bir parmağı gerektirdiğinden, emülatör ve bir fare kullanarak Studio'da simüle edilebilir.
Parametreler
Bir Enum.SwipeDirection cepleme hareketinin yönünü gösteren (Yukarı, Aşağı, Sola veya Sağa).
Harekete dahil dokunma noktalarının sayısı (genellikle 1).
Kod Örnekleri
This code sample will cause a Frame (or other GuiObject) to bounce when a swipe gesture is performed on a touch-enabled device (or Studio's emulator). Horizontal swipes will change the hue of the GuiObject.BackgroundColor3, while vertical swipes will change the saturation.
local frame = script.Parent
frame.Active = true
-- How far the frame should bounce on a successful swipe
local BOUNCE_DISTANCE = 50
-- Current state of the frame
local basePosition = frame.Position
local hue = 0
local saturation = 128
local function updateColor()
frame.BackgroundColor3 = Color3.fromHSV(hue / 256, saturation / 256, 1)
end
local function onTouchSwipe(swipeDir, _touchCount)
-- Change the BackgroundColor3 based on the swipe direction
local deltaPos
if swipeDir == Enum.SwipeDirection.Right then
deltaPos = UDim2.new(0, BOUNCE_DISTANCE, 0, 0)
hue = (hue + 16) % 255
elseif swipeDir == Enum.SwipeDirection.Left then
deltaPos = UDim2.new(0, -BOUNCE_DISTANCE, 0, 0)
hue = (hue - 16) % 255
elseif swipeDir == Enum.SwipeDirection.Up then
deltaPos = UDim2.new(0, 0, 0, -BOUNCE_DISTANCE)
saturation = (saturation + 16) % 255
elseif swipeDir == Enum.SwipeDirection.Down then
deltaPos = UDim2.new(0, 0, 0, BOUNCE_DISTANCE)
saturation = (saturation - 16) % 255
else
deltaPos = UDim2.new()
end
-- Update the color and bounce the frame a little
updateColor()
frame.Position = basePosition + deltaPos
frame:TweenPosition(basePosition, Enum.EasingDirection.Out, Enum.EasingStyle.Bounce, 0.7, true)
end
frame.TouchSwipe:Connect(onTouchSwipe)
updateColor()
TouchTap
Bu olay, oyuncu dokunma etkinleştirilmiş bir cihaz kullanarak UI öğesine dokunma hareketi yaptığında ateşlenir.Bir dokunma, herhangi bir hareketin dahil olmadığı hızlı bir tek dokunmadır (daha uzun basılma GuiObject.TouchLongPress ateş edecek ve dokunma sırasında hareket etmek GuiObject.TouchPan ve / veya GuiObject.TouchSwipe ateş edecektir).Harekete dahil olan parmakların nispi konumlarını tanımlayan bir tablo ile ateş eder Vector2 nesneleriyle.
Bu olay sadece bir parmağı gerektirdiğinden, emülatör ve bir fare kullanarak Studio'da simüle edilebilir.
Parametreler
Kod Örnekleri
This code sample will toggle the GuiObject.BackgroundTransparency of a UI element, like a Frame, when it is tapped on a touch-enabled device.
local frame = script.Parent
frame.Active = true
local function onTouchTap()
-- Toggle background transparency
if frame.BackgroundTransparency > 0 then
frame.BackgroundTransparency = 0
else
frame.BackgroundTransparency = 0.75
end
end
frame.TouchTap:Connect(onTouchTap)