TextService
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
El TextService es un servicio responsable internamente de manejar la pantalla del texto en el juego.
Esta clase tiene dos funciones de miembros:
La función TextService:GetTextSize() le da a los desarrolladores la capacidad de calcular el espacio requerido para una determinada cadena de texto con formato especificado, que devuelve un tamaño de píxel Vector2 especificado.
La función TextService:FilterStringAsync() es requerida para filtrar adecuadamente el texto especificado por el usuario (como mensajes de chat o otras entradas) en el interés del usuario. Los desarrolladores que no están usando el Roblox por defecto Chat , o permiten que los usuarios ingresen de otra manera, deben usar esta función.
Resumen
Métodos
Calcula las dimensiones de Vector2 (en píxeles) que se tomarán con el texto al usar los parámetros de formato y limitaciones de tamaño especificados.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
La traducción de chat no se soporta en el chat de legado. Este método ya no se soporta y no debería usarse.
- FilterStringAsync(stringToFilter : string,fromUserId : number,textContext : Enum.TextFilterContext):TextFilterResult
Filtra una cadena que se recibe de un usuario y devuelve un TextFilterResult que se puede usar para distribuir el texto filtrado correctamente.
Regresa una tabla que contiene el nombre y la cara de una familia de fuentes.
Calcula la longitud y altura del texto proporcionado.
Propiedades
Métodos
GetTextSize
Calcula las dimensiones de Vector2 (en píxeles) que se tomarán con el texto al usar los parámetros de formato y limitaciones de tamaño especificados.
Nota, el parámetro fontSize no aceptará el Enum.FontSize En cambio, el tamaño de números que coincida con el Enum.FontSize Encuentro deberá usarse. Esto no es igual al valor del Enum.FontSize Encuentro. Por ejemplo, para el tipo de fuente 2>Tamaño12</
Esta función es una alternativa útil a la propiedad TextLabel.TextBounds de la propiedad TextLabel y TextButton objetos. Usar la propiedad 1> Class.TextLabel.TextSeconds1> para calcular el texto de dimensiones que requiere es a menudo impracticable ya que requiere un objeto
Con GetTextSize, las dimensiones requeridas por una determinada cadena de texto en una determinada TextLabel o TextButton se pueden calcular antes de que se cree cualquier objeto o propiedad de texto.
Se recomienda a los desarrolladores agregar un píxel de espacio a la lista de resultados para asegurarse de que no se desactivadolos textos.
Este método es limitado a solo fuentes que estén listadas en Enum.Font . Para obtener acceso a más fuentes, puede usar TextService:GetTextBoundsAsync() en su lugar.
Parámetros
La cadena para la cual se calcula el tamaño del texto.
El número que representa el tamaño de fuente usado.
El tipo de fuente usado.
El TextLabel.AbsoluteSize del objeto de texto que se usará. Requerido para calcular cómo se envolverá el texto.
Devuelve
El tamaño del espacio requerido, en píxeles, por la cadena con el formato especificado.
Muestras de código
local TextService = game:GetService("TextService")
local function getTextBounds()
local message = "Hello World"
local size = Vector2.new(1, 1)
local bounds = TextService:GetTextSize(message, 12, "SourceSans", size)
return bounds + Vector2.new(1, 1)
end
print(getTextBounds())
FilterAndTranslateStringAsync
La traducción de chat no se soporta en el chat de legado. Este método ya no se soporta y no se debe usar. Todas las llamadas devuelven un objeto vacío. Transladar mensajes de chat solo está disponible a través de TextChatService .
Parámetros
Devuelve
FilterStringAsync
La función FilterStringAsync filtra una cadena que se recibe de un usuario, utilizando el TextService y devuelve un TextFilterResult que se puede usar para distribuir el texto filtrado correctamente.
Uso
Este método debería llamarse una vez cada vez que un usuario envía un mensaje. No almacene los resultados de esta función y reutilícelos para mensajes separados. Si un usuario envía el mismo texto varias veces, este método debe llamarse nuevamente cada vez que se envía el mensaje. Si los resultados están almacenados y reutilizados, la detección de spam y muchas formas de filtrado de contexto podrían romperse y poner en riesgo la seg
Sin embargo, se recomienda mantener estos objetos de resultado para mostrar el mismo mensaje a los usuarios que se unen al servidor más tarde. Por ejemplo: esto se puede usar para implementar con seguridad y eficiencia un registro de chat del servidor que siempre usa el filtrado más restrictivo para los usuarios que se unen más tarde, o para mostrar texto como un nombre de mascota a un usuario que se une al juego después de que se haya generado y filtrado el nombre.
El parámetro opcional Enum.TextFilterContext no afectará al resultado filtrado de la consulta. Este valor se usará para mejorar el filtrado de texto de Roblox.
El texto privado es cualquier cosa que solo se vea para un jugador específico, en lugar de cada jugador. Por ejemplo, si el chat se ve para un jugador específico, o para un grupo de jugadores seleccionados, entonces el chat se considera servidor privado. Chat para equipos o chat que es potencialmente visible para un grupo más amplio, como el servidor, es considerado público. Si no está seguro de qué califica su texto, deje el campo opcional en blanco.
Nota:
- Este método siempre devuelve para hacer una llamada de filtrado de texto
- Este método puede fallar si hay un error de servicio que no se puede resolver. Si esta función falla un error, no intente nuevamente la solicitud; este método implementa su propia lógica de intento de nuevo internamente. Si este método falla, no muestre el texto a ningún usuario.
- Este método actualmente lanza si fromUserId no está en línea en el servidor actual. Planificamos apoyar a los usuarios que están desconectados o en un servidor diferente en el futuro.
Parámetros
El texto para ser filtrado.
El ID de usuario del filtro de texto.
El contexto en el que se usará el mensaje filtrado.
Devuelve
Muestras de código
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TextService = game:GetService("TextService")
local Players = game:GetService("Players")
local Remotes = Instance.new("Folder")
Remotes.Name = "PetNamingRemotes"
Remotes.Parent = ReplicatedStorage
local UserNamedPet = Instance.new("RemoteEvent")
UserNamedPet.Name = "UserNamedPet"
UserNamedPet.Parent = Remotes
local SendPetName = Instance.new("RemoteEvent")
SendPetName.Name = "SendPetName"
SendPetName.Parent = Remotes
local RequestAllPetNames = Instance.new("RemoteFunction")
RequestAllPetNames.Name = "RequestAllPetNames"
RequestAllPetNames.Parent = Remotes
local filterResults = {}
local function broadcastPetName(userId)
local filterResult = filterResults[userId]
if filterResult then
for _, player in pairs(Players:GetPlayers()) do
if player then
-- spawn a new thread so as to not yield the update
task.spawn(function()
-- grab the filtered string for this user
local toUserId = player.UserId
local filteredString = filterResult:GetNonChatStringForUserAsync(toUserId)
filteredString = filteredString or ""
SendPetName:FireClient(player, userId, filteredString)
end)
end
end
end
end
UserNamedPet.OnServerEvent:Connect(function(player, petName)
local fromUserId = player.UserId
-- pcall to catch errors
local success, result = pcall(function()
return TextService:FilterStringAsync(petName, fromUserId)
end)
if success then
filterResults[fromUserId] = result
broadcastPetName(fromUserId)
else
print("Could not filter pet name")
end
end)
RequestAllPetNames.OnServerInvoke = function(player)
local toUserId = player.UserId
local petNames = {}
-- go through filter results and filter the pet name to be sent
for fromUserId, filterResult in pairs(filterResults) do
local filteredString = filterResult:GetNonChatStringForUserAsync(toUserId)
filteredString = filteredString or ""
-- need to convert userId to string so it can't be sent via a remote function
petNames[tostring(fromUserId)] = filteredString
end
return petNames
end
Players.PlayerRemoving:Connect(function(oldPlayer)
local userId = oldPlayer.UserId
filterResults[userId] = nil
end)
GetFamilyInfoAsync
Regresa una tabla que contiene el nombre y la cara de una familia de fuentes.
La tabla devuelta está estructurada como esta:
type FaceInfo = {Name: string, -- Ejemplos: "Regular", "Book", "Italic", "Thin Italic"Weight: Enum.FontWeight,Style: Enum.FontStyle, -- Italic o Normal}type FamilyInfo = {Name: string, -- Ejemplos: "Source Sans Pro", "Grenze Gotisch"Faces: {FaceInfo} -- Siempre hay al menos 1, pero puede haber hasta 18.}
Si la familia de fuentes ya ha sido cargada por un llamado anterior a GetFamilyInfoAsync , ContentProvider:PreloadAsync() o un objeto de texto con la propiedad TextLabel.FontFace, entonces el método se muestra sin rendimiento.
Errores
Este método puede fallar debido a errores de red. Siempre debe envolverlo en un pcall para el manejo de errores.
Lanza un error en estos escenarios:
- La familia pasada es una cadena vacía.
- La descarga de la familia falló.
- El ID de la propiedad no es válido o apunta a una propiedad que no existe.
Parámetros
ID de activo de la familia de fuentes para buscar.
Devuelve
La información sobre la familia de fuentes.
Muestras de código
local TextService = game:GetService("TextService")
local familyToCheck = "rbxasset://fonts/families/Arial.json"
-- This is a yield function which may take up to a few seconds to download the font.
local info = TextService:GetFamilyInfoAsync(familyToCheck)
print("Name of the font:", info.Name)
print("Faces:")
for _, face in info.Faces do
print("--------")
print("Name:", face.Name)
print("Weight:", face.Weight.Name)
print("Style:", face.Style.Name)
end
GetTextBoundsAsync
Este método es similar a TextService:GetTextSize() , pero usa el objeto Font en lugar de Enum.Font, que tiene acceso a más fuentes.
Se utiliza para medir el tamaño de algunos textos que se dan un conjunto de propiedades como la cadena, el tamaño y el tipo de fuente.
Esta es una función de rendimiento porque algunas fuentes pueden necesitar cargarse para poder medirlas. Si la fuente ya está cargada, entonces no rendirá. ContentProvider:PreloadAsync() se puede usar para asegurarse de que una fuente se cargue.
Errores
Este método puede fallar debido a errores de red. Siempre debe envolverlo en un pcall para el manejo de errores.
Lanza un error en estos escenarios:
- El GetTextBoundsParams.Font tiene una familia vacía.
- El argumento params fue nulo.
- La familia de fuentes o la cara de fuente no se pudo descargar.
Parámetros
Una referencia a un objeto GetTextBoundsParams .
Devuelve
Muestras de código
local TextService = game:GetService("TextService")
local params = Instance.new("GetTextBoundsParams")
params.Text = "hello world!"
params.Font = Font.new("rbxasset://fonts/families/GrenzeGotisch.json", Enum.FontWeight.Thin)
params.Size = 20
params.Width = 200
local size = TextService:GetTextBoundsAsync(params)
print("The size of the text is:", size)