一个 文本框 允许玩家提供文本输入。它与一个 TextButton 的行为相同,除了单个文本框可以通过单击、点击或游戏手柄选择放入焦点之外。 在焦点中,玩家可以使用键盘来更改 Text 属性。
- 如果没有文本,PlaceholderText 将会显示。这是有助于提示玩家输入数据类型或格式的提示。
- 默认情况下,ClearTextOnFocus 属性已启用,确保在 TextBox 聚焦时不会有任何文本。这可能不是玩家应该编辑的文本。
- Class.Toolbar.MultiLine|MultiLine 属性允许玩家输入多个行文本,并且在行文本中使用新行角角 ( \n )。
Class.ContextActionService 尊重 TextBox 键binds 并且会自动防止 key press 事件被传到与 ContextActionService:BindAction() 绑定的动作。UserInputService.InputBegan 和相关事件仍然会在 TextBox 处于焦点时发生。
集中状态
您可以检测到并更改 TextBox 的焦点状态:
- 当对话框出现时,您可以使用 CaptureFocus 来确保玩家不会在可用时单击 TextBox ;您可以使用 ContextActionService:BindAction() 来将特定键绑定到使用此功能的 TextBox 上。当 TextBox 处于焦点时, Focused 事
- 您可以使用 IsFocused 来检查是否有某个 TextBox 在焦点上。或使用 UserInputService:GetFocusedTextBox() 来检查是否有任何 TextBox 在焦点上。
- 如果在游戏过程中出现更重要的事件,您可以 ReleaseFocus 的 TextBox 以便返回玩家的键盘输入到您的游戏。
文本编辑
一个 TextBox 支持通过其 CursorPosition 和 SelectionStart 属性来选择文本。使用 GetPropertyChangedSignal ,您可以检测到当选择发生变更时。另外,您可以在 TextBox 中复制并粘贴文本,启用基本剪贴板协助持
文本过滤通知 使用文本进行玩家间通信的游戏必须使用 TextService:FilterStringAsync() 或 Chat:FilterStringAsync() 来过滤此文本。如果这未能正确过滤,你的游戏可能会受到审核动作。
代码示例
-- Place this code in a LocalScript inside a TextBox
local textBox = script.Parent
local secretWord = "roblox"
local colorNormal = Color3.new(1, 1, 1) -- white
local colorWrong = Color3.new(1, 0, 0) -- red
local colorCorrect = Color3.new(0, 1, 0) -- green
-- Initialize the state of the textBox
textBox.ClearTextOnFocus = true
textBox.Text = ""
textBox.Font = Enum.Font.Code
textBox.PlaceholderText = "What is the secret word?"
textBox.BackgroundColor3 = colorNormal
local function onFocused()
textBox.BackgroundColor3 = colorNormal
end
local function onFocusLost(enterPressed, _inputObject)
if enterPressed then
local guess = textBox.Text
if guess == secretWord then
textBox.Text = "ACCESS GRANTED"
textBox.BackgroundColor3 = colorCorrect
else
textBox.Text = "ACCESS DENIED"
textBox.BackgroundColor3 = colorWrong
end
else
-- The player stopped editing without pressing Enter
textBox.Text = ""
textBox.BackgroundColor3 = colorNormal
end
end
textBox.FocusLost:Connect(onFocusLost)
textBox.Focused:Connect(onFocused)
概要
属性
确定是否单击TextBox会清除其TextBox.Text属性。
确定文本指针在字节上的 Offset,或 -1 如果没有曲标。
确定使用的字体。
确定使用的字体。
在 TextBox 中缩放文本之间的空格。
Class.Toolbar 最多可以显示的图形符号数。
设置为“真”时,文本在 TextBox 内可以移动到多个行。这也可以让玩家使用 Enter 键来移动到新行。
设置当没有输入文本到 TextBox 时使用的文本颜色。
设置当没有输入任何文字到 TextBox 时显示的文本。
确定是否使用丰富的文本格式对 TextBox 渲染 TextBox.Text 字符串。
确定文本选择的起始位置,或-1如果没有文本被选择。
如果设置为 true,输入 native 到平台是使用 Roblox 的内置键盘而不是 Roblox 的预置键盘。
确定 UI 元素的渲染字符串。
在偏移中,UI 元素的文本的大小。
确定渲染文本的颜色。
确定用户是否可以更改 Text 。
文本是否能够满足 TextBox 的限制。
改变文本是否会调整以便适合它的图形用户界面对象。
在偏移量下确定文本的行高。
确定文本渊的颜色。
确定文本渊(轮廓)的透明度。
确定渲染文本的透明度。
控制显示在此 TextBox 中的文本的切分。
在 GUI 元素空间内确定是否包含多个行内的文本包围,并且切断多余的文本。
确定渲染文本的横向对齐。
确定渲染文本的垂直对齐。
确定是否同时输入。
对 GuiObject 的起始位置,相对于其绝对大小。
决定是否按照子内容进行调整。
确定 GuiObject 背景颜色。
确定 GuiObject 背景和边框的透明度。
确定 GuiObject 边框的颜色。
确定GuiObject边界的方式是与其尺寸相对于其他方式。
确定 GuiObject 边框的像素宽度。
决定是否在父 GUI 元素外的子元素 GuiObjects 会渲染。
确定玩家是否在 GuiObject 上主动按着。
确定 GuiButton 是否可以与或不可以与之交互,或 GuiState 的 GuiObject 是否正在变更或不变更。
控制使用 GuiObject 与 UIGridStyleLayout 时的排序顺序。
设置 GuiObject 将在游戏手柄选择器向下移动时选择。
设置 GuiObject 将在游戏手柄选择器移动到左侧时选择。
设置 GuiObject ,该选项卡将在游戏手柄选择器移动到右侧时被选中。
设置 GuiObject ,该选项卡将在游戏手柄选择器上移动时选择。
确定 GuiObject 的像素和向量位置。
确定GuiObject的旋转角度。
确定游戏手柄是否可以选择GUI。
覆盖游戏手柄的默认装饰。
游戏手柄选择 GuiObjects 的顺序。
确定 GuiObject 的像素和浮点大小。
设置 Size 轴,其父元素对象的大小将对应于其大小。
Class.GuiObject.BackgroundTransparency|BackgroundTransparency 和 TextTransparency 的混合属性。
确定 GuiObject 和它的子代是否会被渲染。
确定GuiObject 在其他人的相对位置上渲染的顺序。
描述 UI 元素的实际屏幕位置,以像素计。
描述 UI 元素的实际屏幕旋转度。
描述 UI 元素的实际屏幕大小,以像素计。
设置为“真”时,本地化将被应用到此 GuiBase2d 和它的子代。
一个引用 LocalizationTable 用于应用自动本地化到此 GuiBase2d 和它的子代。
在下向方向中自定义游戏手柄选择行为。
在左向向选择游戏手柄的行为进行自定义。
自定义游戏手柄选择行为在正确的方向。
在上向方向中自定义游戏手柄选择行为。
允许自定义游戏手柄选择移动。
方法
强制客户端专注在 TextBox 上。
返回 true 如果文本框是聚焦的,或 false 如果不是。
强制客户端将 TextBox 从焦点移除。
- TweenPosition(endPosition : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : bool,callback : function):bool
顺滑地将一个 GUI 移到一个新的 UDim2 。
- TweenSize(endSize : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : bool,callback : function):bool
无缝地将 GUI 重新 UDim2 。
- TweenSizeAndPosition(endSize : UDim2,endPosition : UDim2,easingDirection : Enum.EasingDirection,easingStyle : Enum.EasingStyle,time : number,override : bool,callback : function):bool
无缝地将 GUI 移到新的大小和位置。
活动
继承自GuiObject的活动发生在用户开始通过人类-计算机界面设备(鼠标按钮,触摸开始,键盘按钮,等等)进行交互时。
发生在用户改变通过人类-计算机界面设备(鼠标按钮向下,触摸开始,键盘按钮向下等)的交互方式时。
发生在用户停止通过人类-计算机界面设备(鼠标按钮向下,触摸开始,键盘按钮向下等)的交互。
当用户将鼠标移动到 GUI 元素时,它会发生。
当用户移动鼠标时,发生。
在用户移动鼠标时,每当它在 GUI 元素内时,它就会发生。
当用户回到鼠标轮时,火焰会在鼠标上方的 GUI 元素上燃烧。
当鼠标位于 GUI 元素上时,用户会滚动鼠标轮。
当 Gamepad 选择器对 GuiObject 时,发生了焦点错误。
当游戏手柄选择器停止对 GuiObject 的焦点时发生。
在玩家开始时,持续并停止长按 UI 元素。
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState):RBXScriptSignal
当玩家移动其手指时,触发 UI 元素。
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState):RBXScriptSignal
在玩家使用两个手指在 UI 元素上执行叠捏或拉动动作时触发。
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState):RBXScriptSignal
在玩家使用两个手指在 UI 元素上执行旋转动作时触发。
在玩家在 UI 元素上执行滑动手势时触发。
当玩家在 UI 元素上执行点击手势时触发。
- SelectionChanged(amISelected : bool,previousSelection : GuiObject,newSelection : GuiObject):RBXScriptSignal
在游戏手柄选择移动到,离开或更改连接的 GuiBase2d 或任何子对象。
属性
ContentText
CursorPosition
CursorPosition 确定文本 cursor 在字节上的偏移,或 -1 如果 TextBox 当前未被编辑。一个值 1 代表开始位置,在 Text 属性上。当与 SelectionStart 属性结合使用时,可以在 TextBox 中同时获得和设置选定的文
需要注意的是,这个属性的单位是 字节 ,而且许多不能用于 Unicode 字符,例如表情符号,长度在 1 字节之上。例实例,如果玩家在 TextBox 中输入 “Hello👋” – “Hello” 即时跟随手势标志 – 曲сор位置将为 10,而不是 7,因为 emoji 使用 4 字节。
代码示例
local textBox = script.Parent
local function showSelection()
if textBox.CursorPosition == -1 or textBox.SelectionStart == -1 then
print("No selection")
else
local selectedText = string.sub(
textBox.Text,
math.min(textBox.CursorPosition, textBox.SelectionStart),
math.max(textBox.CursorPosition, textBox.SelectionStart)
)
print('The selection is:"', selectedText, '"')
end
end
textBox:GetPropertyChangedSignal("CursorPosition"):Connect(showSelection)
textBox:GetPropertyChangedSignal("SelectionStart"):Connect(showSelection)
Font
字体属性选择一个或多个预设 fonts 以便 UI 元素将其文本渲染到。一些字体有大写、标号和/或灯光变体(因为没有字体重量或字体风格属性)。
除了“传承”字体之外,每个字体都会以等同的行高显示文本。 “代码”字体是唯一的单空格字体。它有一个独特的属性,每个角色都有完全相同的宽度和高度比例为 1:2。每个角色的宽度大约是 TextBox.TextSize 属性的一半。
此属性与 TextBox.FontFace 属性保持同步。当设置字体时,字体面会设置为 Font.fromEnum(value)。
代码示例
local textLabel = script.Parent
while true do
-- Iterate over all the different fonts
for _, font in pairs(Enum.Font:GetEnumItems()) do
textLabel.Font = font
textLabel.Text = font.Name
task.wait(1)
end
end
local frame = script.Parent
-- Create a TextLabel displaying each font
for _, font in pairs(Enum.Font:GetEnumItems()) do
local textLabel = Instance.new("TextLabel")
textLabel.Name = font.Name
-- Set the text properties
textLabel.Text = font.Name
textLabel.Font = font
-- Some rendering properties
textLabel.TextSize = 24
textLabel.TextXAlignment = Enum.TextXAlignment.Left
-- Size the frame equal to the height of the text
textLabel.Size = UDim2.new(1, 0, 0, textLabel.TextSize)
-- Add to the parent frame
textLabel.Parent = frame
end
-- Layout the frames in a list (if they aren't already)
if not frame:FindFirstChildOfClass("UIListLayout") then
local uiListLayout = Instance.new("UIListLayout")
uiListLayout.Parent = frame
end
FontFace
FontFace 属性与字体属性类似,但允许设置不存在在字体列表中的字体。
此属性与 TextBox.Font 属性保持同步。当设置字体时,字体将设置到相应的枚列值,或者在 Enum.Font.Unknown 如果没有匹配。
MaxVisibleGraphemes
此属性控制 TextBox 上显示的最大图形数量(或文本单位),无论是显示 TextBox.PlaceholderText 或 TextBox.Text。
改变属性不会改变可见的图形的位置或大小 - 布局将以所有图形都可见的假设计计算。
将属性设置为 -1 会禁用限制,并且显示整个 TextBox.Text 。
OpenTypeFeatures
OpenTypeFeaturesError
RichText
此属性决定 whether the TextBox 使用丰富的文本格式渲染 TextBox.Text 字符。 丰富的文本使用 simple markup 标签来式定义字符的段落在 bold、italic、指定颜色等方面。
要使用丰富的文本,请在 TextBox.Text 字符串中包含格式标签。
注意,当 TextBox 有此属性启用,且箱子获得焦点,用户将能够编辑并与完整的 XML 字符串,包括所有的格式标签,焦点会自动解析并渲染标签为 Rich 文本。当焦点丢失时,文本会自动解析并渲染标签为 Rich 文本。
SelectionStart
确定文本选择的起始位置或-1,如果TextBox没有选择文本范围。 如果值是-1或相当于 CursorPosition ,那么文本选择的范围将为空。 此属性使用与鼠标位置相同的位置逻辑。 选择开始会大于鼠标位置,如果鼠标位置在选择开始的开结束,或鼠标位置
代码示例
local textBox = script.Parent
local function showSelection()
if textBox.CursorPosition == -1 or textBox.SelectionStart == -1 then
print("No selection")
else
local selectedText = string.sub(
textBox.Text,
math.min(textBox.CursorPosition, textBox.SelectionStart),
math.max(textBox.CursorPosition, textBox.SelectionStart)
)
print('The selection is:"', selectedText, '"')
end
end
textBox:GetPropertyChangedSignal("CursorPosition"):Connect(showSelection)
textBox:GetPropertyChangedSignal("SelectionStart"):Connect(showSelection)
Text
文本属性确定 UI 元素的内容。 视觉属性由 TextBox.TextColor3 、 TextBox.TextTransparency 、 Class.Toolbar.TextSize
您可以渲染表情符号(例如,😃)和其他符号。 这些特殊符号不受 TextBox.TextColor3 属性的影响。 它们可以被粘贴到 Script 和 LocalScript 对象,以及在属性窗口中的字段。
这个属性可能包含新行字符,但它不能在属性窗口中输入新行字符。同样,这个属性可能包含一个Tab字符,但它将以空格而不是作为输入表示。
代码示例
local TweenService = game:GetService("TweenService")
local textLabel = script.Parent
local content = {
"Welcome to my game!",
"Be sure to have fun!",
"Please give suggestions!",
"Be nice to other players!",
"Don't grief other players!",
"Check out the shop!",
"Tip: Don't die!",
}
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
local RNG = Random.new()
local fadeIn = TweenService:Create(textLabel, tweenInfo, {
TextTransparency = 0,
})
local fadeOut = TweenService:Create(textLabel, tweenInfo, {
TextTransparency = 1,
})
local lastIndex
while true do
-- Step 0: Fade out before doing anything
fadeOut:Play()
task.wait(tweenInfo.Time)
-- Step 1: pick content that wasn't the last displayed
local index
repeat
index = RNG:NextInteger(1, #content)
until lastIndex ~= index
-- Make sure we don't show the same thing next time
lastIndex = index
-- Step 2: show the content
textLabel.Text = content[index]
fadeIn:Play()
task.wait(tweenInfo.Time + 1)
end
local textLabel = script.Parent
textLabel.Text = "Kaboom!"
while true do
for size = 5, 100, 5 do
textLabel.TextSize = size
textLabel.TextTransparency = size / 100
task.wait()
end
task.wait(1)
end
local frame = script.Parent
-- Create a TextLabel displaying each font
for _, font in pairs(Enum.Font:GetEnumItems()) do
local textLabel = Instance.new("TextLabel")
textLabel.Name = font.Name
-- Set the text properties
textLabel.Text = font.Name
textLabel.Font = font
-- Some rendering properties
textLabel.TextSize = 24
textLabel.TextXAlignment = Enum.TextXAlignment.Left
-- Size the frame equal to the height of the text
textLabel.Size = UDim2.new(1, 0, 0, textLabel.TextSize)
-- Add to the parent frame
textLabel.Parent = frame
end
-- Layout the frames in a list (if they aren't already)
if not frame:FindFirstChildOfClass("UIListLayout") then
local uiListLayout = Instance.new("UIListLayout")
uiListLayout.Parent = frame
end
local textLabel = script.Parent
-- This text wrapping demo is best shown on a 200x50 px rectangle
textLabel.Size = UDim2.new(0, 200, 0, 50)
-- Some content to spell out
local content = "Here's a long string of words that will "
.. "eventually exceed the UI element's width "
.. "and form line breaks. Useful for paragraphs "
.. "that are really long."
-- A function that will spell text out two characters at a time
local function spellTheText()
-- Iterate from 1 to the length of our content
for i = 1, content:len() do
-- Get a substring of our content: 1 to i
textLabel.Text = content:sub(1, i)
-- Color the text if it doesn't fit in our box
if textLabel.TextFits then
textLabel.TextColor3 = Color3.new(0, 0, 0) -- Black
else
textLabel.TextColor3 = Color3.new(1, 0, 0) -- Red
end
-- Wait a brief moment on even lengths
if i % 2 == 0 then
task.wait()
end
end
end
while true do
-- Spell the text with scale/wrap off
textLabel.TextWrapped = false
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with wrap on
textLabel.TextWrapped = true
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with text scaling on
-- Note: Text turns red (TextFits = false) once text has to be
-- scaled down in order to fit within the UI element.
textLabel.TextScaled = true
-- Note: TextWrapped is enabled implicitly when TextScaled = true
--textLabel.TextWrapped = true
spellTheText()
task.wait(1)
end
local textLabel = script.Parent
local moods = {
["happy"] = "😃",
["sad"] = "😢",
["neutral"] = "😐",
["tired"] = "😫",
}
while true do
for mood, face in pairs(moods) do
textLabel.Text = "I am feeling " .. mood .. "! " .. face
task.wait(1)
end
end
TextBounds
只读属性 TextBounds 将在 Offsets 中反射所需的最小文本尺寸。 在其他 words 中,如果您尝试将文本放在长方形中,这个属性将反射您需要在长方形中才能正确处理文本的最小尺寸。
使用 TextService:GetTextSize() , 您可以预测 TextBounds 将在指定的 TextLabel 上, TextBox.Font , TextBox.TextSize 和框架大小。
代码示例
local textBox = script.Parent
-- The smallest the TextBox will go
local minWidth, minHeight = 10, 10
-- Set alignment so our text doesn't wobble a bit while we type
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextYAlignment = Enum.TextYAlignment.Top
local function updateSize()
textBox.Size = UDim2.new(0, math.max(minWidth, textBox.TextBounds.X), 0, math.max(minHeight, textBox.TextBounds.Y))
end
textBox:GetPropertyChangedSignal("TextBounds"):Connect(updateSize)
TextColor3
这个属性确定了所有由 GUI 元素渲染的文本的颜色。 此属性以及 TextBox.Font 、 TextBox.TextSize 和 1> Class.Toolbar.TextTransparency1> 将决定文本的视觉属性。 文本是在文本stroke
重要的是,文本容易被玩家阅读!请确保选择少于或无法饱和度的颜色,例如白色、灰色或黑色。确保文本的颜色与 UI 元素的背景 TextBox.BackgroundColor3 有一致。如果元素有透明背景,请尝试使用黑色 TextBox.TextStrokeColor3 来帮助与之
代码示例
local textBox = script.Parent
local function hasVowels(str)
return str:lower():find("[aeiou]")
end
local function onTextChanged()
local text = textBox.Text
-- Check for vowels
if hasVowels(text) then
textBox.TextColor3 = Color3.new(0, 0, 0) -- Black
else
textBox.TextColor3 = Color3.new(1, 0, 0) -- Red
end
end
textBox:GetPropertyChangedSignal("Text"):Connect(onTextChanged)
-- Place this code in a LocalScript inside a TextBox
local textBox = script.Parent
local secretWord = "roblox"
local colorNormal = Color3.new(1, 1, 1) -- white
local colorWrong = Color3.new(1, 0, 0) -- red
local colorCorrect = Color3.new(0, 1, 0) -- green
-- Initialize the state of the textBox
textBox.ClearTextOnFocus = true
textBox.Text = ""
textBox.Font = Enum.Font.Code
textBox.PlaceholderText = "What is the secret word?"
textBox.BackgroundColor3 = colorNormal
local function onFocused()
textBox.BackgroundColor3 = colorNormal
end
local function onFocusLost(enterPressed, _inputObject)
if enterPressed then
local guess = textBox.Text
if guess == secretWord then
textBox.Text = "ACCESS GRANTED"
textBox.BackgroundColor3 = colorCorrect
else
textBox.Text = "ACCESS DENIED"
textBox.BackgroundColor3 = colorWrong
end
else
-- The player stopped editing without pressing Enter
textBox.Text = ""
textBox.BackgroundColor3 = colorNormal
end
end
textBox.FocusLost:Connect(onFocusLost)
textBox.Focused:Connect(onFocused)
-- Place this code in a LocalScript within a TextLabel/TextButton
local textLabel = script.Parent
-- Some colors we'll use with TextColor3
local colorNormal = Color3.new(0, 0, 0) -- black
local colorSoon = Color3.new(1, 0.5, 0.5) -- red
local colorDone = Color3.new(0.5, 1, 0.5) -- green
-- Loop infinitely
while true do
-- Count backwards from 10 to 1
for i = 10, 1, -1 do
-- Set the text
textLabel.Text = "Time: " .. i
-- Set the color based on how much time is left
if i > 3 then
textLabel.TextColor3 = colorNormal
else
textLabel.TextColor3 = colorSoon
end
task.wait(1)
end
textLabel.Text = "GO!"
textLabel.TextColor3 = colorDone
task.wait(2)
end
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Place a StringValue called "GameState" in the ReplicatedStorage
local vGameState = ReplicatedStorage:WaitForChild("GameState")
-- Place this code in a TextLabel
local textLabel = script.Parent
-- Some colors we'll use with TextColor3
local colorNormal = Color3.new(0, 0, 0) -- black
local colorCountdown = Color3.new(1, 0.5, 0) -- orange
local colorRound = Color3.new(0.25, 0.25, 1) -- blue
-- We'll run this function to update the TextLabel as the state of the
-- game changes.
local function update()
-- Update the text
textLabel.Text = "State: " .. vGameState.Value
-- Set the color of the text based on the current game state
if vGameState.Value == "Countdown" then
textLabel.TextColor3 = colorCountdown
elseif vGameState.Value == "Round" then
textLabel.TextColor3 = colorRound
else
textLabel.TextColor3 = colorNormal
end
end
-- Pattern: update once when we start and also when vGameState changes
-- We should always see the most updated GameState.
update()
vGameState.Changed:Connect(update)
TextDirection
TextEditable
TextEditable 决定用户是否可以通过输入 Text 来改变。 建议禁用 ClearTextOnFocus ,以便在此属性禁用时,文本 可以在焦点上清除。 此属性有用于在游戏中复制从中复制的文本。
TextScaled
而不是使用 TextScaled,我们建议您考虑使用 AutomaticSize,这是一个新的方法,可以动态为您提供最佳视觉效果。
TextScaled 属性确定是否将文本缩放到填满整个 UI 元素空间。 当这个启用时,TextBox.TextSize 会被忽略,TextBox.TextWrapped 会自动启用。 此属性对于在 BillboardGuis 中 rend染文本元素有用。
当此属性用于屏幕空间用户界面时,可能需要使用 UITextSizeConstraint 来限制可能的文本大小范围。
文字放大和自动放大
建议开发者避免使用 TextScaled 并调整 UI 来利用自动大小属性。 这两个属性之间的核心差异如下:
- TextScaled 将内容(文本)缩放到容纳 UI 的大小。 无视绩效,如果缩放过小,一些文本可能会变得不可读取。
- 自动大小将内容扩展到 UI 上。
使用自动大小调整您的 UI 以满足内容(文本)的同时保持一致的字体大小。有关自动大小的更多信息,请参阅“UI 自动大小”文章。
我们建议您不要在同一个 UI 对象上应用 both TextScaled 和 AutomaticSize。 如果您应用了两个属性:
- 自动大小确定一个 GuiObject 在此可用的最大空间(在此例中,文本)
- TextScaled 使用自动大小确定的可用空间来缩放字体大小,以满足可用空间,这将扩展到最大字体大小(100),如果没有大小限制
- 最终结果将是:文本将进入 100 字体大小,UI 对象将扩展以容纳该文本
使用 both AutomaticSize 和 TextScaled 在同一时间使用可能会导致较大的缩放差异,而不会在自动大小关闭时。
代码示例
local textLabel = script.Parent
-- This text wrapping demo is best shown on a 200x50 px rectangle
textLabel.Size = UDim2.new(0, 200, 0, 50)
-- Some content to spell out
local content = "Here's a long string of words that will "
.. "eventually exceed the UI element's width "
.. "and form line breaks. Useful for paragraphs "
.. "that are really long."
-- A function that will spell text out two characters at a time
local function spellTheText()
-- Iterate from 1 to the length of our content
for i = 1, content:len() do
-- Get a substring of our content: 1 to i
textLabel.Text = content:sub(1, i)
-- Color the text if it doesn't fit in our box
if textLabel.TextFits then
textLabel.TextColor3 = Color3.new(0, 0, 0) -- Black
else
textLabel.TextColor3 = Color3.new(1, 0, 0) -- Red
end
-- Wait a brief moment on even lengths
if i % 2 == 0 then
task.wait()
end
end
end
while true do
-- Spell the text with scale/wrap off
textLabel.TextWrapped = false
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with wrap on
textLabel.TextWrapped = true
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with text scaling on
-- Note: Text turns red (TextFits = false) once text has to be
-- scaled down in order to fit within the UI element.
textLabel.TextScaled = true
-- Note: TextWrapped is enabled implicitly when TextScaled = true
--textLabel.TextWrapped = true
spellTheText()
task.wait(1)
end
TextSize
TextSize 属性确定一个渲染文本的一行高度在 Offset 中。单位是 Offset,而不是点(在大多数文件编辑程序中使用)。“遗产”字体不持有此属性。
代码示例
local textLabel = script.Parent
textLabel.Text = "Kaboom!"
while true do
for size = 5, 100, 5 do
textLabel.TextSize = size
textLabel.TextTransparency = size / 100
task.wait()
end
task.wait(1)
end
TextStrokeColor3
TextStrokeColor3 属性设置绘制的文本的stroke或outline的颜色。 此属性和 TextBox.TextStrokeTransparency 确定视觉属性的文本stroke。
文本渊是在正常文本之前渲染,它是在+/-1像素偏移在每个方向上的4个文本渊渲染。 文本渊渲染独立和相同的文本在+/-1像素偏移在每个方向上。
代码示例
local textLabel = script.Parent
-- How fast the highlight ought to blink
local freq = 2
-- Set to yellow highlight color
textLabel.TextStrokeColor3 = Color3.new(1, 1, 0)
while true do
-- math.sin oscillates from -1 to 1, so we change the range to 0 to 1:
local transparency = math.sin(workspace.DistributedGameTime * math.pi * freq) * 0.5 + 0.5
textLabel.TextStrokeTransparency = transparency
task.wait()
end
TextStrokeTransparency
TextStrokeTransparency 属性设置绘制的文本的stroke或outline的透明度。 此属性和 TextBox.TextStrokeColor3 确定视觉属性的文本stroke。
文本渍是在正常文本之前渲染,它是通过在+/-1像素 Offset在每个方向上独立和相同的文本的四次渲染来显示的。
代码示例
local textLabel = script.Parent
-- How fast the highlight ought to blink
local freq = 2
-- Set to yellow highlight color
textLabel.TextStrokeColor3 = Color3.new(1, 1, 0)
while true do
-- math.sin oscillates from -1 to 1, so we change the range to 0 to 1:
local transparency = math.sin(workspace.DistributedGameTime * math.pi * freq) * 0.5 + 0.5
textLabel.TextStrokeTransparency = transparency
task.wait()
end
TextTransparency
在UI元素中渲染的所有文字的透明度都受到TextColor3属性的决定。 此属性与 TextBox.Font 、 TextBox.TextSize 和 TextBox.TextColor3 的协作决定了文本的视觉属性。 文本在文字stroke ( 2>Class.Toolbar.TextStrokeTransparency2> ) 后会渲染。
使用数字 for-Loop 来显示屏幕上的文本是一个很棒的方法来吸引玩家的注意。
-- Count backwards from 1 to 0, decrementing by 0.1for i = 1, 0, -0.1 dotextLabel.TextTransparency = itask.wait(0.1)end
代码示例
local TweenService = game:GetService("TweenService")
local textLabel = script.Parent
local content = {
"Welcome to my game!",
"Be sure to have fun!",
"Please give suggestions!",
"Be nice to other players!",
"Don't grief other players!",
"Check out the shop!",
"Tip: Don't die!",
}
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
local RNG = Random.new()
local fadeIn = TweenService:Create(textLabel, tweenInfo, {
TextTransparency = 0,
})
local fadeOut = TweenService:Create(textLabel, tweenInfo, {
TextTransparency = 1,
})
local lastIndex
while true do
-- Step 0: Fade out before doing anything
fadeOut:Play()
task.wait(tweenInfo.Time)
-- Step 1: pick content that wasn't the last displayed
local index
repeat
index = RNG:NextInteger(1, #content)
until lastIndex ~= index
-- Make sure we don't show the same thing next time
lastIndex = index
-- Step 2: show the content
textLabel.Text = content[index]
fadeIn:Play()
task.wait(tweenInfo.Time + 1)
end
local textLabel = script.Parent
textLabel.Text = "Kaboom!"
while true do
for size = 5, 100, 5 do
textLabel.TextSize = size
textLabel.TextTransparency = size / 100
task.wait()
end
task.wait(1)
end
TextWrapped
启用时,该属性将在多个行中在 GUI 元素的空间中渲染文本,以便 TextBox.TextBounds 不会超过 GUI 元素的 GuiBase2d.AbsoluteSize。
这可以通过将长段的文本分为多个行来实现。 行间跳过会优先考虑空格;如果长段文本超出元素宽度,该文字将被分为多个行。
如果进一步的行空格会导致文本的垂直高度超过元素的垂直高度(TextBox.TextBounds),那么该行就不会渲染,因为GuiBase2d.AbsoluteSize的 Y 部分不会显示。
代码示例
local textLabel = script.Parent
-- This text wrapping demo is best shown on a 200x50 px rectangle
textLabel.Size = UDim2.new(0, 200, 0, 50)
-- Some content to spell out
local content = "Here's a long string of words that will "
.. "eventually exceed the UI element's width "
.. "and form line breaks. Useful for paragraphs "
.. "that are really long."
-- A function that will spell text out two characters at a time
local function spellTheText()
-- Iterate from 1 to the length of our content
for i = 1, content:len() do
-- Get a substring of our content: 1 to i
textLabel.Text = content:sub(1, i)
-- Color the text if it doesn't fit in our box
if textLabel.TextFits then
textLabel.TextColor3 = Color3.new(0, 0, 0) -- Black
else
textLabel.TextColor3 = Color3.new(1, 0, 0) -- Red
end
-- Wait a brief moment on even lengths
if i % 2 == 0 then
task.wait()
end
end
end
while true do
-- Spell the text with scale/wrap off
textLabel.TextWrapped = false
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with wrap on
textLabel.TextWrapped = true
textLabel.TextScaled = false
spellTheText()
task.wait(1)
-- Spell the text with text scaling on
-- Note: Text turns red (TextFits = false) once text has to be
-- scaled down in order to fit within the UI element.
textLabel.TextScaled = true
-- Note: TextWrapped is enabled implicitly when TextScaled = true
--textLabel.TextWrapped = true
spellTheText()
task.wait(1)
end
TextXAlignment
文本对齐在 UI 元素的空间内确定横向对齐(X 轴)的文本渲染。它与 CSS 文本对齐属性相同,左、右和中心值(不存在就位选项)。 对于左和右,文本会在左/右文本边界触摸 UI 元素矩形的中心。 对于中心,每个文本行都会在中心元素的角落。
这个属性与 TextBox.TextYAlignment 一起使用,用于完全确定在两个轴上的文本对齐。此属性不会影响 read-only 属性 TextBox.TextBounds 和 TextBox.TextFits 。
代码示例
-- Paste this in a LocalScript within a TextLabel/TextButton/TextBox
local textLabel = script.Parent
local function setAlignment(xAlign, yAlign)
textLabel.TextXAlignment = xAlign
textLabel.TextYAlignment = yAlign
textLabel.Text = xAlign.Name .. " + " .. yAlign.Name
end
while true do
-- Iterate over both TextXAlignment and TextYAlignment enum items
for _, yAlign in pairs(Enum.TextYAlignment:GetEnumItems()) do
for _, xAlign in pairs(Enum.TextXAlignment:GetEnumItems()) do
setAlignment(xAlign, yAlign)
task.wait(1)
end
end
end
TextYAlignment
文本对齐在 UI 元素的空间中确定垂直对齐(Y 轴)的文本渲染。 对于顶部和底部,文本会在顶部/底部文本边缘触摸 UI 元素的边缘。 对于中心,文本会在顶部边缘的文本边缘与元素的底部边缘之间形成平等空间。
这个属性与 TextBox.TextXAlignment 一起使用,用于完全确定在两个轴上的文本对齐。此属性不会影响 read-only 属性 TextBox.TextBounds 和 TextBox.TextFits 。
代码示例
-- Paste this in a LocalScript within a TextLabel/TextButton/TextBox
local textLabel = script.Parent
local function setAlignment(xAlign, yAlign)
textLabel.TextXAlignment = xAlign
textLabel.TextYAlignment = yAlign
textLabel.Text = xAlign.Name .. " + " .. yAlign.Name
end
while true do
-- Iterate over both TextXAlignment and TextYAlignment enum items
for _, yAlign in pairs(Enum.TextYAlignment:GetEnumItems()) do
for _, xAlign in pairs(Enum.TextXAlignment:GetEnumItems()) do
setAlignment(xAlign, yAlign)
task.wait(1)
end
end
end
方法
CaptureFocus
强制客户端专注在 TextBox 上。
返回
代码示例
local ContextActionService = game:GetService("ContextActionService")
local ACTION_NAME = "FocusTheTextBox"
local textBox = script.Parent
local function handleAction(actionName, inputState, _inputObject)
if actionName == ACTION_NAME and inputState == Enum.UserInputState.End then
textBox:CaptureFocus()
end
end
ContextActionService:BindAction(ACTION_NAME, handleAction, false, Enum.KeyCode.Q)
ReleaseFocus
强制客户端将 TextBox 从焦点移除。 The submitted 参数允许您在 enterPressed 事件中覆盖 TextBox.FocusLost 参数。
此项目应用于使用 LocalScript 以在线模式中正常运行。
下面的代码将强制客户端在选择“Tex” 后的 5 秒内将注意力从“Tex” 上移除:
local TextBox = script.Parent
TextBox.Focused:Connect(function()
wait(5)
TextBox:ReleaseFocus()
end)
请注意,上面的示例假设它是在 LocalScript 中,作为 TextBox 的子脚本。
参数
返回
代码示例
local textBox = script.Parent
local function onFocused()
task.wait(5)
textBox:ReleaseFocus()
end
textBox.Focused:Connect(onFocused)
活动
FocusLost
客户端放置焦点离开 TextBox - 通常是客户端点击/点击 TextBox 外部时。 这也会触发,如果 TextBox 强制焦点放置在用户上。
它可以与 TextBox.Focused 一起使用来跟踪当 TextBox 获得和失去焦点时。
还请参阅 UserInputService.TextBoxFocused 和 UserInputService.TextBoxFocusReleased 以获取类似的功能,这些功能都依赖于 UserInputService 服务。
此事件仅在 LocalScript 中发生。
参数
一个Boolean指示是否按Enter键以失去焦点(是)或不是(是)。
一个 InputObject 实例,表示导致 TextBox 失焦的输入类型。
代码示例
local gui = script.Parent
local textBox = gui.TextBox
local function focusLost(enterPressed)
if enterPressed then
print("Focus was lost because enter was pressed!")
else
print("Focus was lost without enter being pressed")
end
end
textBox.FocusLost:Connect(focusLost)
local textBox = script.Parent
local function onFocusLost(enterPressed, inputThatCausedFocusLost)
if enterPressed then
print("Player pressed Enter")
else
print("Player pressed", inputThatCausedFocusLost.KeyCode)
end
end
textBox.FocusLost:Connect(onFocusLost)
Focused
当 TextBox 获得焦点时,它会发射 - 通常是客户端单击/点击 TextBox 开始输入文本时。 这也会发射,如果 TextBox 强制聚焦在用户上。
它可以与 TextBox.FocusLost 一起使用,以跟踪当 TextBox 获得和失去焦点时。
还请参阅 UserInputService.TextBoxFocused 和 UserInputService.TextBoxFocusReleased 以获取类似的功能,这些功能都依赖于 UserInputService 服务。
此事件仅在 LocalScript 中发生。
代码示例
local textBox = script.Parent
local function onFocused()
print("Focused")
end
textBox.Focused:Connect(onFocused)