TextService

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible
Service
Non répliqué

Le service TextService est un service responsable de la gestion de l'affichage du texte dans le jeu.

Cette classe a deux fonctions membres :

La fonction TextService:GetTextSize() donne aux développeurs la possibilité de calculer l'espace requis pour une chaîne de texte spécifique avec un formatage spécifié, en retournant une taille de pixel Vector2 .

La fonction TextService:FilterStringAsync() est requise pour filtrer correctement le texte spécifié par l'utilisateur (tels que les messages de chat ou d'autres entrées) dans l'intérêt de la sécurité de l'utilisateur.Les développeurs qui n'utilisent pas la valeur par défaut de Roblox Chat ou qui permettent aux utilisateurs d'entrer autrement du texte doivent utiliser cette fonction.

Résumé

Méthodes

Propriétés

Méthodes

GetTextSize

Calcul des dimensions Vector2 (en pixels) qui seront prises en charge avec du texte lors de l'utilisation des paramètres de formatage et des contraintes de taille spécifiés.

Remarque, le paramètre fontSize n'acceptera pas le Enum.FontSize Enum.Au lieu de cela, la taille entière correspondant à la valeur Enum.FontSize Enum doit être utilisée.Ce n'est pas égal à la valeur du Enum.FontSize Enum.Par exemple, pour la police de taille 11, l'entier 11 doit être utilisé.

Cette fonction est une alternative utile à la propriété TextLabel.TextBounds de l'objet TextLabel et TextButton des objets.L'utilisation de la propriété TextLabel.TextBounds pour calculer le texte des dimensions requiert souvent est peu pratique car elle nécessite la création d'un objet TextLabel .

Avec GetTextSize, les dimensions requises par une chaîne de texte spécifique dans une particularité TextLabel ou TextButton peuvent être calculées avant la création ou le configurerde propriété du texte.

Il est recommandé aux développeurs d'ajouter un pixel de bordure au résultat pour garantir que aucun texte ne soit off.

Cette méthode est limitée aux polices qui sont listées dans Enum.Font. Pour accéder à plus de polices, vous pouvez utiliser TextService:GetTextBoundsAsync() à la place.

Paramètres

string: string

La chaîne pour laquelle la taille du texte doit être calculée.

Valeur par défaut : ""
fontSize: number

L'entier représentant la taille de police utilisée.

Valeur par défaut : ""
font: Enum.Font

La police utilisée.

Valeur par défaut : ""
frameSize: Vector2

Le TextLabel.AbsoluteSize du texte objet à utiliser. Nécessaire pour calculer comment le texte sera enroulé.

Valeur par défaut : ""

Retours

La taille de l'espace requis, en pixels, par la chaîne avec le formatage spécifié.

Échantillons de code

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

Rendement

La traduction de chat n'est pas prise en charge dans le chat hérité.Cette méthode n'est plus prise en charge et ne doit pas être utilisée.Toutes les appels retournent un objet vide.La traduction des messages de chat n'est disponible que via TextChatService.

Paramètres

stringToFilter: string
Valeur par défaut : ""
fromUserId: number
Valeur par défaut : ""
targetLocales: Array
Valeur par défaut : ""
Valeur par défaut : "PrivateChat"

Retours

FilterStringAsync

Rendement

La fonction FilterStringAsync filtre une chaîne reçue d'un utilisateur, en utilisant le TextService , et renvoie un TextFilterResult qui peut être utilisé pour distribuer le texte correctement filtré en conséquence.

Utilisation

Cette méthode doit être appelée une fois à chaque fois qu'un utilisateur envoie un message.Ne cachez pas les résultats de cette fonction et réutilisez-les pour des messages séparés.Si un utilisateur soumet le même texte plusieurs fois, cette méthode doit être appelée à nouveau à chaque fois que le message est envoyé.Si les résultats sont stockés en mémoire et réutilisés, la détection du spam et de nombreuses formes de filtrage contextuel seront rompues et potentiellement mettront la sécurité des utilisateurs en danger.Les jeux qui utilisent de manière inappropriée les résultats en cache peuvent faire l'objet d'une modération.

Cependant, il est recommandé de conserver ces objets de résultat pour afficher le même message aux utilisateurs qui rejoignent le serveur plus tard.Par exemple : cela peut être utilisé pour mettre en œuvre de manière sûre et efficace un journal de chat de serveur qui utilise toujours le filtre le moins restrictif pour les utilisateurs qui rejoignent plus tard, ou pour afficher efficacement du texte comme un nom d'animal à un utilisateur qui rejoint le jeu après que l'animal ait été généré pour la première fois et filtré le nom.

Le paramètre facultatif Enum.TextFilterContext optionnel n'aura pas d'impact sur le résultat filtré de la recherche/requête. Cette valeur sera utilisée pour améliorer le filtrage du texte de Roblox.

Le texte privé est tout ce qui est vu par des joueurs spécifiques, plutôt que par chaque joueur.Par exemple, si le chat est vu par un seul joueur ou par un groupe de joueurs sélectionné, le chat est alors considéré comme privé.Le chat pour les équipes ou le chat qui est potentiellement visible pour un groupe plus large, comme le serveur, est considéré comme public/publique.Si vous n'êtes pas sûr de ce que votre texte qualifie, laissez le champ facultatif vide.

Remarque :

  • Cette méthode produit toujours pour faire un appel de service de filtrage de texte
  • Cette méthode peut lancer si il y a une erreur de service qui ne peut pas être résolue.Si cette fonction lance une erreur, ne réessayez pas la demande ; cette méthode implémente sa propre logique de réessai en interne.Si cette méthode échoue, ne pas afficher le texte à n'importe quel utilisateur.
  • Cette méthode lance actuellement si de l'utilisateur n'est pas en ligne sur le serveur actuel.Nous prévoyons de soutenir les utilisateurs qui sont hors ligne ou sur un serveur différent à l'avenir.

Paramètres

stringToFilter: string

Le texte à filtrer.

Valeur par défaut : ""
fromUserId: number

L'ID du joueur filtrant le texte.

Valeur par défaut : ""

Le contexte dans lequel le message filtré sera utilisé.

Valeur par défaut : "PrivateChat"

Retours

Échantillons de code

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

Rendement

Renvoie une table contenant le nom et les visages d'une famille de police.

La table retournée est structurée comme ceci :


type FaceInfo = {
Name: string, -- Exemples : "Régulier", "Livre", "Italique", "Thin Italic"
Weight: Enum.FontWeight,
Style: Enum.FontStyle, -- Soit normal soit italique
}
type FamilyInfo = {
Name: string, -- Exemples : "Source Sans Pro", "Grenze Gotisch"
Faces: {FaceInfo} -- Il y a toujours au moins 1, mais il peut y en avoir jusqu'à 18.
}

Si la famille de police a déjà été chargée par un appel précédent à GetFamilyInfoAsync , ContentProvider:PreloadAsync() ou un objet de texte avec la propriété TextLabel.FontFace configurer, la méthode retourne sans céder.

Erreurs

Cette méthode peut échouer en raison d'erreurs réseau. Vous devez toujours l'envelopper dans un pcall pour la gestion des erreurs.

Lance une erreur dans ces scénarios :

  • La famille passée est une chaîne vide.
  • Téléchargement de la famille échoué.
  • L'ID de la ressource n'est pas valide ou pointe vers une ressource qui n'existe pas.

Paramètres

assetId: ContentId

ID de ressource de la famille de police à rechercher.

Valeur par défaut : ""

Retours

Les informations sur la famille de police.

Échantillons de code

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

Rendement

Cette méthode est similaire à TextService:GetTextSize() , mais utilise l'objet Font au lieu de Enum.Font , qui a accès à plus de polices.

Utilisé pour mesurer à quelle taille un texte donnera un ensemble de propriétés telles que la chaîne, la taille et la police.

C'est une fonction de rendement car certaines polices peuvent avoir besoin d'être chargées pour les mesurer.Si la police est déjà chargée, alors elle ne produira pas.ContentProvider:PreloadAsync() peut être utilisé pour s'assurer qu'une police est chargée.

Erreurs

Cette méthode peut échouer en raison d'erreurs réseau. Vous devez toujours l'envelopper dans un pcall pour la gestion des erreurs.

Lance une erreur dans ces scénarios :

  • Le GetTextBoundsParams.Font a une famille vide.
  • L'argument params était nil.
  • La famille de police ou la face de police n'a pas pu être télécharger.

Paramètres

Une référence à un objet GetTextBoundsParams de référence.

Valeur par défaut : ""

Retours

La taille du texte en tant que Vector2 .

Échantillons de code

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

Rendement

Paramètres

fontSize: number
Valeur par défaut : ""
font: Enum.Font
Valeur par défaut : ""

Retours

Évènements