TextService
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Der TextService ist ein Dienst, der intern verantwortlich ist für die Darstellung von Text im Spiel.
Diese Klasse hat zwei Mitgliedfunktionen:
Die TextService:GetTextSize()-Funktion gibt Entwicklern die Möglichkeit, den für einen bestimmten Textstrich mit angegebenem Format erforderlichen Raum zu berechnen, und gibt eine Vector2-Pixelgröße zurück.
Die TextService:FilterStringAsync() Funktion ist erforderlich, um den vom Benutzer angegebenen Text (z. B. Chatnachrichten oder andere Eingaben) im Interesse der Benutzer-Sicherheit richtig zu filtern.Entwickler, die nicht die Standardversion von Roblox Chat oder Benutzern erlauben, sonst Text einzugeben, müssen diese Funktion verwenden.
Zusammenfassung
Methoden
Berechnet die Vector2 Dimensionen (in Pixeln), die mit Text verwendet werden, wenn die angegebenen Formatierungs参数 und Größen约束 verwendet werden.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
Chat-Übersetzung wird im Legacy-Chat nicht unterstützt. Diese Methode wird nicht mehr unterstützt und sollte nicht verwendet werden.
- FilterStringAsync(stringToFilter : string,fromUserId : number,textContext : Enum.TextFilterContext):TextFilterResult
Filtert einen String, der von einem Benutzer empfangen wird, und gibt einen TextFilterResult zurück, mit dem der entsprechend korrekt gefilterte Text verteilt werden kann.
Gibt eine Tabelle zurück, die den Namen und die Gesichter einer Schriftfamilie enthält.
Berechnet die Breite und Höhe des Textes mit angegebenen Parametern.
Eigenschaften
Methoden
GetTextSize
Berechnet die Vector2 Dimensionen (in Pixeln), die mit Text verwendet werden, wenn die angegebenen Formatierungs参数 und Größen约束 verwendet werden.
Beachten Sie, dass der FontSize-Parameter die Enum.FontSize Enum nicht akzeptiert.Stattdessen sollte die entsprechende Ganzzahlgröße mit der Enum.FontSize Enum verwendet werden.Das ist nicht gleich dem Wert des Enum.FontSize Enum.Zum Beispiel für die Schriftart Size11, sollte der Ganzzahl 11 verwendet werden.
Diese Funktion ist eine nützliche Alternative zur Eigenschaft TextLabel.TextBounds der TextLabel und TextButton Objekte.Die Verwendung der Eigenschaft TextLabel.TextBounds, um die Dimensions-Text berechnen zu lassen, erfordert oft unpraktisch, da ein TextLabel Objekt erstellt werden muss.
Mit GetTextSize können die Dimensionen, die von einem bestimmten Textstring in einem bestimmten TextLabel oder TextButton erforderlich sind, berechnet werden, bevor ein Objekt erstellt oder eine festlegenfestgelegt wird.
Es wird empfohlen, den Entwicklern, ein Pixel der Pufferung zum Ergebnis hinzuzufügen, um sicherzustellen, dass kein Text auswird.
Diese Methode ist auf nur Schriften beschränkt, die in Enum.Font aufgelistet sind. Um auf mehr Schriften zuzugreifen, kannst du stattdessen TextService:GetTextBoundsAsync() verwenden.
Parameter
Der Text, für den die Textgröße berechnet werden soll.
Die Zahl, die die verwendete Schriftgröße darstellt.
Die verwendete Schriftart.
Das TextLabel.AbsoluteSize des Textobjekts, das verwendet werden soll. Erforderlich, um zu berechnen, wie der Text umwickelt wird.
Rückgaben
Die Größe des benötigten Raums, in Pixeln, durch die Zeichenkette mit der angegebenen Formatierung.
Code-Beispiele
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.
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
Chat-Übersetzung wird im Legacy-Chat nicht unterstützt.Diese Methode wird nicht mehr unterstützt und sollte nicht verwendet werden.Alle Anrufe geben ein leeres Objekt zurück.Die Übersetzung von Chatnachrichten ist nur über TextChatService verfügbar.
Parameter
Rückgaben
FilterStringAsync
Die FilterStringAsync-Funktion filtert einen empfangenen String mit der TextService und gibt einen TextFilterResult zurück, mit dem der korrekt gefilterte Text entsprechend verteilt werden kann.
Verwendung
Diese Methode sollte einmal aufgerufen werden, wenn ein Benutzer eine Nachricht einreicht.Cache die Ergebnisse dieser Funktion nicht und verwende sie wieder für separate Nachrichten.Wenn ein Benutzer denselben Text mehrmals einreicht, muss diese Methode jedes Mal erneut aufgerufen werden, wenn die Nachricht gesendet wird.Wenn die Ergebnisse zwischengespeichert und wiederverwendet werden, wird die Spamerkennung und viele Formen der kontextbezogenen Filterung unterbrochen und möglicherweise die Sicherheit der Benutzer gefährdet.Spiele, die unzureichend gespeicherte Ergebnisse verwenden, können Moderation erfahren.
Es wird jedoch empfohlen, diese Ergebnisobjekte zu behalten, um die gleiche Nachricht den Benutzern anzuzeigen, die sich später dem Server anschließen.Zum Beispiel: Dies kann verwendet werden, um einen Server-Chat-Log sicher und effizient zu implementieren, der immer den am wenigsten restriktiven Filter für Benutzer verwendet, die später beitreten, oder um Text wie einen Haustiernamen effizient an einen Benutzer anzuzeigen, der dem Spiel beitritt, nachdem der Name zuerst gespawnt und gefiltert wurde.
Der optionale Enum.TextFilterContext-Parameter wird sich nicht auf das gefilterte Ergebnis der Abfrage auswirken. Dieser Wert wird verwendet, um Roblox' Textfilterung zu verbessern.
Privater Text ist alles, was nur von bestimmten Spielern gesehen wird, anstatt von jedem Spieler:in.Wenn der Chat von einem einzelnen Spieler:inoder von einer ausgewählten Gruppe von Spielern gesehen wird, gilt der Chat als privater Server.Chatten für Teams oder Chatten, das möglicherweise für eine breitere Gruppe sichtbar ist, wie der Server, wird als öffentlich angesehen.Wenn du dir nicht sicher bist, was dein Text qualifiziert ist, lass das optionale Feld leer.
Hinweis:
- Diese Methode gibt immer Aus, um einen Textfilterdienst aufzurufen
- Diese Methode kann werfen, wenn es einen Dienstfehler gibt, der nicht gelöst werden kann.Wenn diese Funktion einen Fehler wirft, versuche nicht, die Anfrage erneut zu stellen; diese Methode implementiert ihre eigene Wiederholungslogik intern.Wenn diese Methode fehlschlägt, zeige den Text nicht einem Benutzer an.
- Diese Methode wirft derzeit ab, wenn von uid nicht auf dem aktuellen Server online ist.Wir planen, Benutzer zu unterstützen, die offline sind oder auf einem anderen Server sind, in der Zukunft.
Parameter
Der Text, der gefiltert wird.
Die ID des Spielers, der den Text filtert.
Der Kontext, in dem die gefilterte Nachricht verwendet wird.
Rückgaben
Code-Beispiele
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.
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
Gibt eine Tabelle zurück, die den Namen und die Gesichter einer Schriftfamilie enthält.
Die zurückgegebene Tabelle ist strukturiert wie folgt:
type FaceInfo = {Name: string, -- Beispiele: "Regelmäßig", "Buch", "Italisch", "Dünnes Italisch"Weight: Enum.FontWeight,Style: Enum.FontStyle, -- Entweder normal oder italienisch}type FamilyInfo = {Name: string, -- Beispiele: "Source Sans Pro", "Grenze Gotisch"Faces: {FaceInfo} -- Es gibt immer mindestens 1, aber es kann bis zu 18 sein.}
Wenn die Schriftfamilie bereits durch eine frühere Aufruf von GetFamilyInfoAsync , ContentProvider:PreloadAsync() oder ein Textobjekt mit der festlegenTextLabel.FontFace geladen wurde, gibt die Methode ohne Zustimmung zurück.
Fehler
Diese Methode kann aufgrund von Netzwerkfehlern fehlschlagen. Du solltest sie immer in einem pcall für Fehlerverwaltung einpacken.
Wirft einen Fehler in diesen Szenarien auf:
- Die übergebene Familie ist eine leere String.
- Das Herunterladen der Familie ist fehlgeschlagen.
- Die Asset-ID ist ungültig oder zeigt auf ein Asset, das nicht existiert.
Parameter
Asset-ID der Schriftfamilie, die abgerufen werden soll.
Rückgaben
Die Informationen über die Schriftfamilie.
Code-Beispiele
This example showcases a possible usage of the TextService:GetFamilyInfoAsync() method.
It prints out information about a font family to the output window.
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
Diese Methode ist ähnlich wie TextService:GetTextSize() , verwendet aber das Objekt Font anstelle von Enum.Font, das Zugriff auf mehr Schriften hat.
Wird verwendet, um zu messen, wie groß ein Text mit einer Reihe von Eigenschaften wie der String, der Schriftgröße und der Schriftart gegeben wird.
Dies ist eine Yield-Funktion, weil einige Schriften möglicherweise geladen werden müssen, um sie zu messen.Wenn die Schriftart bereits geladen ist, wird sie nicht ausgegeben.ContentProvider:PreloadAsync() kann verwendet werden, um sicherzustellen, dass eine Schriftart geladen wird.
Fehler
Diese Methode kann aufgrund von Netzwerkfehlern fehlschlagen. Du solltest sie immer in einem pcall für Fehlerverwaltung einpacken.
Wirft einen Fehler in diesen Szenarien auf:
- Die GetTextBoundsParams.Font hat eine leere Familie.
- Das Argument params war nil.
- Die Schriftfamilie oder Schriftface konnte nicht herunterladenwerden.
Parameter
Eine Referenz auf ein GetTextBoundsParams Objekt.
Rückgaben
Code-Beispiele
This example shows how you can use TextService:GetTextBoundsAsync().
It measures the size of some text in a specific font, then prints the result.
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)