TextService
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Le TextService est un service responsable internement de la gestion de l'affichage du texte dans le jeu.
Cette classe a deux fonctions de membres :
La fonction Class.TextService:GetTextSize() donne aux développeurs la capacité de calculer l'espace requis pour une chaîne de texte spécifique avec une mise en forme spécifiée, en retournant une taille de Datatype.Vector2 de pixel.
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 les intérêts de la sécurité de l'utilisateur. Les développeurs qui ne utilisent pas le Chat de Roblox, ou qui autorisent les utilisateurs à entrer du texte autrement doivent utiliser cette fonction.
Résumé
Méthodes
Calcul les dimensions Vector2 (en pixels) qui seront prises avec le texte lors de l'utilisation des paramètres de mise en forme et des contraintes de taille spécifiés.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
La traduction de chat n'est pas prise en charge dans le chat legacy. Cette méthode n'est plus prise en charge et ne devrait pas être utilisée.
- FilterStringAsync(stringToFilter : string,fromUserId : number,textContext : Enum.TextFilterContext):TextFilterResult
Filtre une chaîne reçue d'un utilisateur et renvoie un TextFilterResult qui peut être utilisé pour distribuer le texte correctement filtré de manière appropriée.
Renvoie une table contenant le nom et le visage d'une police de caractère.
Calcul la largeur et la hauteur du texte donné.
Propriétés
Méthodes
GetTextSize
Calcul les dimensions Vector2 (en pixels) qui seront prises avec le texte lors de l'utilisation des paramètres de mise en forme et des contraintes de taille spécifiés.
Remarquez que le paramètre fontSize ne prendra pas l'enu enum. Au lieu de cela, la taille de l'intérieur correspondant à la valeur de l'enu enum doit être utilisée. Ce n'est pas équivalant à la valeur de l'enu enum. Par exemple, pour le font 1 de la police, la taille de l'intérieur doit être utilisée.
Cette fonction est une alternative utile à la propriété TextLabel.TextBounds de la TextLabel et TextButton objets. L'utilisation de la propriété 1> Class.TextLabel.TextSeconds1> pour calculer le texte des dimensions nécessite souvent d'être impractique car il nécessite la création d'un objet 4>
Avec GetTextSize, les dimensions requises par une certaine chaîne de texte dans un certain TextLabel ou TextButton peuvent être calculées avant la création d'un objet ou la configurerd'une propriété de texte.
Les développeurs sont recommandés d'ajouter un pixel de coussin à la résolution pour s'assurer que aucun texte ne sera coupe.
Cette méthode est limitée aux polices qui sont répertoriées dans Enum.Font. Pour obtenir l'accès à plus de polices, vous pouvez utiliser TextService:GetTextBoundsAsync() à la place.
Paramètres
La chaîne pour laquelle la taille du texte est à calculer.
L'intervalle de taille de police utilisée.
La police utilisée.
La TextLabel.AbsoluteSize du texte à utiliser. Requis pour calculer comment le texte sera emballé.
Retours
La taille de l'espace requise, en pixels, par la chaîne avec la mise en forme spécifiée.
Échantillons de code
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 traduction de chat n'est pas prise en charge dans le chat legacy. Ce méthode n'est plus prise en charge et ne devrait pas être utilisé. Toutes les appels retournent un objet vide. La traduction des messages de chat n'est disponible que via TextChatService.
Paramètres
Retours
FilterStringAsync
La fonction FilterStringAsync filtere 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é de manière appropriée.
Utilisation
Cette méthode doit être appelée une fois que chaque fois qu'un utilisateur soumet un message. Ne stockez 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 et réutilisés, la détection du spam et de nombreux types de filtrage contextuel seront potentiellement brisés et mettront la sécur
Cependant, il est recommandé de garder ces objets de résultat pour afficher le même message aux utilisateurs qui rejoignent le serveur plus tard. Par exemple : ceci peut être utilisé pour mettre en œuvre en toute sécurité et efficacement un journal de chat du serveur qui utilise toujours le filtrage le moins restreint pour les utilisateurs qui rejoignent plus tard, ou pour afficher efficacement le texte comme un nom d'animal de compagnie à un utilisateur qui rejoint le jeu après que l'animal de compagnie a été généré et que son filtre de nom a été fil
Le paramètre optionnel Enum.TextFilterContext n'affectera pas 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 considéré comme privé. Chat pour les équipes ou chat qui est potentiellement visible à un plus grand groupe, 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 génère toujours pour faire un appel de service de filtrage de texte
- Cette méthode peut lancer une erreur 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éessayer internement. Si ce méthode échoue, ne affichez pas le texte à n'importe quel utilisateur.
- Cette méthode lance actuellement si fromUserId n'est pas en ligne sur le serveur actuel. Nous prévoyons soutenir les utilisateurs qui sont hors ligne ou sur un autre serveur dans le futur.
Paramètres
Le texte à filtrer.
Le nom d'utilisateur du filtreur de texte.
Le contexte dans lequel le message filtré sera utilisé.
Retours
Échantillons de code
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
Renvoie une table contenant le nom et le visage d'une police de caractère.
La table renvoyée est structurée comme suivant :
type FaceInfo = {Name: string, -- Exemples : « Régulier », « Book », « Italic », « Thin Italic »Weight: Enum.FontWeight,Style: Enum.FontStyle, -- Italique ou normal}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, alors la méthode renvoie sans générer.
Erreurs
Cette méthode peut échouer en raison d'erreurs réseau. Vous devriez toujours la terminer par 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 est invalide ou pointe à une ressource qui n'existe pas.
Paramètres
ID de ressource de la police pour rechercher.
Retours
Les informations sur la police de caractère.
Échantillons de code
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
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 la taille d'un certain nombre de propriétés telles que la chaîne, la taille et la police.
Ceci est une fonction de rendu parce que certaines polices peuvent nécessiter d'être chargées pour les mesurer. Si la police est déjà chargée, alors elle ne rendra pas. ContentProvider:PreloadAsync() peut être utilisé pour vous assurer qu'une police est chargée.
Erreurs
Cette méthode peut échouer en raison d'erreurs réseau. Vous devriez toujours la terminer par un pcall pour la gestion des erreurs.
Lance une erreur dans ces scénarios :
- Le GetTextBoundsParams.Font a une famille vide.
- L'argument params nul.
- La famille de police ou la police de caractère n'a pas pu être télécharger.
Paramètres
Une référence à un objet GetTextBoundsParams.
Retours
Échantillons de code
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)