TextService

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

No creable
Servicio
No replicado

El TextService es un servicio responsable internamente de manejar la visualización de texto en el juego.

Esta clase tiene dos funciones de miembro:

La función TextService:GetTextSize() da a los desarrolladores la capacidad de calcular el espacio requerido para una cadena de texto específica con formato especificado, devolviendo un tamaño de píxel de Vector2 .

La función TextService:FilterStringAsync() es requerida para filtrar adecuadamente el texto especificado por el usuario (como mensajes de chat o otras entradas) con el interés de la seguridad del usuario.Los desarrolladores que no usan el predeterminado de Roblox Chat o permiten que los usuarios ingresen texto de otra manera deben usar esta función.

Resumen

Métodos

Propiedades

Métodos

GetTextSize

Calcula las dimensiones Vector2 (en píxeles) que se tomarán con texto al usar los parámetros de formato y de tamaño especificados.

Tenga en cuenta que el parámetro de fuente de tamaño no aceptará el Enum Enum.FontSize .En cambio, se debe usar el tamaño entero correspondiente con el Enum.FontSize Enum.Esto no es igual al valor del Enum.FontSize Enum.Por ejemplo, para la fuente Size11 , el entero 11 debe usarse.

Esta función es una alternativa útil a la propiedad TextLabel.TextBounds de los objetos TextLabel y TextButton.Usar la propiedad TextLabel.TextBounds para calcular el texto de las dimensiones que requiere es a menudo poco práctico ya que requiere que se cree un objeto TextLabel .

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 o se establezca cualquier objeto o propiedad de texto.

A los desarrolladores se les recomienda agregar un píxel de desactivadoal resultado para garantizar que no se corte texto.

Este método se limita a solo fuentes que estén listadas en Enum.Font. Para obtener acceso a más fuentes, puedes usar TextService:GetTextBoundsAsync() en su lugar.

Parámetros

string: string

La cadena para la cual se calculará el tamaño del texto.

Valor predeterminado: ""
fontSize: number

El entero que representa el tamaño de fuente utilizado.

Valor predeterminado: ""
font: Enum.Font

La fuente utilizada.

Valor predeterminado: ""
frameSize: Vector2

El TextLabel.AbsoluteSize del objeto de texto a usar. Requerido para calcular cómo se envolverá el texto.

Valor predeterminado: ""

Devuelve

El tamaño del espacio requerido, en píxeles, por la cadena con el formato especificado.

Muestras de código

This example showcases a possible usage of the GetTextSize function.

It computes the possible Vector2 dimensions (in pixels) of the string "Hello World" when the font size is 12, the font size SourceSans and the frame size is (1,1).

The expected return of this function is the Vector2 value 9, 13.

TextService: Getting the Text Size

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

Proporciona

La traducción de chat no se admite en el chat legado.Este método ya no se soporta y no debe usarse.Todas las llamadas devuelven un objeto vacío.Traducir mensajes de chat solo está disponible a través de TextChatService .

Parámetros

stringToFilter: string
Valor predeterminado: ""
fromUserId: number
Valor predeterminado: ""
targetLocales: Array
Valor predeterminado: ""
Valor predeterminado: "PrivateChat"

Devuelve

FilterStringAsync

Proporciona

La función FilterStringAsync filtra una cadena que se recibe de un usuario, usando el TextService , y devuelve un TextFilterResult que se puede usar para distribuir el texto filtrado correctamente de acuerdo.

Uso

Este método debe 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íe el mensaje.Si los resultados se almacenan en caché y se reutilizan la detección de spam y muchas formas de filtrado contextual, se romperá potencialmente la seguridad del usuario y se pondrá en riesgo.Los juegos que usan incorrectamente los resultados almacenados en caché pueden enfrentar la moderación.

Sin embargo, se anima a mantener estos objetos de resultado para mostrar el mismo mensaje a los usuarios que se unan al servidor más tarde.Por ejemplo: esto se puede utilizar para implementar de forma segura y eficiente un registro de chat de servidor que siempre use el filtro de menor restricción para los usuarios que se unan más tarde, o para mostrar eficientemente texto como un nombre de mascota a un usuario que se una al juego después de que la mascota se generara por primera vez y se filtrara el nombre.

El parámetro opcional Enum.TextFilterContext no afectará el 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 es vista por jugadores específicos, en lugar de todos los jugadores.Por ejemplo, si el chat es visto por un solo jugador o por un grupo seleccionado de jugadores, entonces el chat se considera servidor privado.El chat para equipos o el chat que es potencialmente visible para un grupo más amplio, como el servidor, se considera público.Si no estás seguro de qué califica tu texto, deja el campo opcional en blanco.

Nota:

  • Este método siempre devuelve para hacer una llamada de servicio de filtrado de texto
  • Este método puede lanzar si hay un error de servicio que no se puede resolver.Si esta función lanza un error, no vuelva a intentar la solicitud; este método implementa su propia lógica de reanudación internamente.Si este método falla, no muestre el texto a ningún usuario.
  • Este método actualmente lanza si desde userId no está en línea en el servidor actual.Planeamos admitir a usuarios que estén desconectados o en un servidor diferente en el futuro.

Parámetros

stringToFilter: string

El texto para ser filtrado.

Valor predeterminado: ""
fromUserId: number

El ID del jugador que filtra el texto.

Valor predeterminado: ""

El contexto en el que se usará el mensaje filtrado.

Valor predeterminado: "PrivateChat"

Devuelve

Muestras de código

This code sample includes a simple demonstration of how TextService:FilterStringAsync() should be implemented in a system where players are allowed to name their pets.

Note, this code sample includes the server-side implementation only (to be placed in a Script). Examples of how to implement the client-side of this system are included under the RemoteEvent and RemoteFunction examples.

Pet Name Filter Example

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

Proporciona

Devuelve una tabla que contiene el nombre y las caras de una familia de fuentes.

La tabla devuelta está estructurada como esto:


type FaceInfo = {
Name: string, -- Ejemplos: "Regular", "Libro", "Itálico", "Itálico fino"
Weight: Enum.FontWeight,
Style: Enum.FontStyle, -- O bien normal o italico
}
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 establecerfuentes ya se ha cargado por una llamada anterior a GetFamilyInfoAsync , ContentProvider:PreloadAsync() o un objeto de texto con la propiedad TextLabel.FontFace , el método devuelve sin rendirse.

Errores

Este método puede fallar debido a errores de red. Siempre debe envolverlo en un pcall para manejo de errores.

Lanza un error en estos escenarios:

  • La familia pasada es una cadena vacía.
  • Descargar la familia falló.
  • El ID del recurso no es válido o apunta a un recurso que no existe.

Parámetros

assetId: ContentId

ID de activo de la familia de fuentes para buscar.

Valor predeterminado: ""

Devuelve

La información sobre la familia de fuentes.

Muestras de código

This example showcases a possible usage of the TextService:GetFamilyInfoAsync() method.

It prints out information about a font family to the output window.

TextService: Getting font family information

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

Proporciona

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 usa para medir cuán grande será un texto dado un conjunto de propiedades como la cadena, el tamaño y la fuente.

Esta es una función de yield porque algunas fuentes pueden necesitar ser cargadas para medirlas.Si la fuente ya está cargada, entonces no producirá.ContentProvider:PreloadAsync() se puede usar para asegurarse de que se cargue una fuente.

Errores

Este método puede fallar debido a errores de red. Siempre debe envolverlo en un pcall para manejo de errores.

Lanza un error en estos escenarios:

  • El GetTextBoundsParams.Font tiene una familia vacía.
  • El argumento params era nil.
  • La familia de fuentes o la cara de fuente no se pudo descargar.

Parámetros

Una referencia a un objeto GetTextBoundsParams de referencia.

Valor predeterminado: ""

Devuelve

El tamaño del texto como Vector2 .

Muestras de código

This example shows how you can use TextService:GetTextBoundsAsync().

It measures the size of some text in a specific font, then prints the result.

TextService: Measuring text size

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)

GetTextSizeOffsetAsync

Proporciona

Parámetros

fontSize: number
Valor predeterminado: ""
font: Enum.Font
Valor predeterminado: ""

Devuelve

Eventos