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 für die Handling-Anzeige von Text im Spiel verantwortlich ist.
Diese Klasse hat zwei Mitgliedfunktionen:
Die Funktion Class.TextService:GetTextSize() gibt Entwicklern die Möglichkeit, die erforderliche Platz für einen bestimmten Text mit einer bestimmten Platzierung zu berechnen, wobei eine Datatype.Vector2 -Pixelgröße zurückgegeben wird.
Die TextService:FilterStringAsync() Funktion ist erforderlich, um den benutzereingebrachten Text (z. B. Chat-Nachrichten oder andere Eingaben) in der Interessen des Benutzerschutzes richtig zu filtern. Entwickler, die nicht die Standard- Chat verwenden, oder Benutzern, die andernfalls Text eingeben, müssen diese Funktion verwenden.
Zusammenfassung
Methoden
Berechnet die Vector2 Dimensionen (in Pixeln), die mit dem Text verwendet werden, wenn die angegebenen Formatierungsparameter und Größenbeschränkungen verwendet werden.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
Chat-Übersetzung wird in 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
Filter eine Strings, die von einem Benutzer erhalten wird, und gibt eine TextFilterResult zurück, die verwendet werden kann, um den richtig gefilterten Text entsprechend zu verteilen.
Kehre eine Tabelle zurück, die den Namen und Gesichter einer Schriftartfamilie enthält.
Berechnet die Breite und Höhe der angegebenen Optionen.
Eigenschaften
Methoden
GetTextSize
Berechnet die Vector2 Dimensionen (in Pixeln), die mit dem Text verwendet werden, wenn die angegebenen Formatierungsparameter und Größenbeschränkungen verwendet werden.
Beachten Sie, dass die fontSize-Option die Enum.FontSize enum nicht akzeptiert, stattdessen sollte die Größe des Intallen mit der Enum.FontSize enum verwendet werden. Dies entspricht nicht dem Wert des Enum.FontSize ulum. Zum Beispiel für die Größe 2>112> ist die Größe 5>115> zu verwenden.
Diese Funktion ist eine nützliche Alternative zu der TextLabel.TextBounds Eigenschaft der TextLabel und TextButton Objekten. Wenn Sie die 1> Class.TextLabel.TextSeconds1> Eigenschaft verwenden, um die Dimensionen des Texts zu berechnen, erfordert dies oft eine 4>
Mit GetTextSize können die Dimensionen, die von einem bestimmten Textstring in einem bestimmten TextLabel oder TextButton benötigt werden, vor dem Erzeugen eines Objekts oder der festlegeneiner Text属性 berechnet werden.
Entwickler werden empfohlen, ein Pixel Pad an das Ergebnis hinzuzufügen, um sicherzustellen, dass kein Text auswird.
Diese Methode ist auf nur Schriften beschränkt, die in Enum.Font aufgeführt sind. Um Zugriff auf mehr Schriften zu erhalten, kannst du stattdessen TextService:GetTextBoundsAsync() verwenden.
Parameter
Die Strings für die die Textgröße berechnet werden soll.
Die Zahl, die die verwendete Schriftgröße repräsentiert.
Die verwendete Schriftart.
Die TextLabel.AbsoluteSize des Textobjekts, die verwendet wird. Benötigt, um zu berechnen, wie der Text umwickelt wird.
Rückgaben
Die Größe des benötigten Platzes, in Pixel, durch die Strings mit der angegebenen Formatierung.
Code-Beispiele
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 in 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 Chat-Nachrichten ist nur über TextChatService verfügbar.
Parameter
Rückgaben
FilterStringAsync
Die FilterStringAsync-Funktion filtert eine Strings, die von einem Benutzer erhalten wird, mit der TextService , und gibt eine TextFilterResult zurück, die verwendet werden kann, um den richtig gefilterten Text entsprechend zu verteilen.
Verwendung
Diese Methode sollte einmal jedes Mal, wenn ein Benutzer eine Nachricht einreicht, aufgerufen werden. Legen Sie die Ergebnisse dieser Funktion nicht in den Zwischenablage und verwenden Sie sie nicht erneut für separate Nachrichten. Wenn ein Benutzer das gleiche Text mehrere Male einreicht, muss diese Funktion erneut aufgerufen werden, jedes Mal, wenn die Nachricht gesendet wird. Wenn die Ergebnisse in der Zwischenablage gespeichert und wiederverwendet werden,
Es wird jedoch empfohlen, diese Ergebnis-Objekte zu behalten, um dasselbe Nachricht an Benutzer anzuzeigen, die dem Server später beitreten. Zum Beispiel: Dies kann verwendet werden, um ein sicheres und effizientes Chat-Log zu implementieren, das immer den least restrictive Filtering für Benutzer verwendet, die später beitreten, oder um Text wie ein Haustier-Name anzuzeigen, um ein Benutzer, der nach dem ersten Spawnen und dem Namen des Haustiers zu einem Benutzer zu beitreten, effizient zu zeigen.
Der optionale Enum.TextFilterContext-Parameter wirkt sich nicht auf das gefilterte Ergebnis der Abfrageaus. Dieser Wert wird verwendet, um die Text-Filterung von Roblox zu verbessern.
Private Text ist alles, was nur bestimmten Spielern angezeigt wird, nicht jedem Spieler:in. Zum Beispiel, wenn der Chat von einem einzelnen Spieler:inoder einer ausgewählten Gruppe von Spielern gesehen wird, wird der Chat als privater Serverbetrachtet. Chat für Teams oder Chat, der möglicherweise breiteren Gruppen von Serverzugänglich ist, wird als öffentlich angesehen. Wenn Sie sich nicht sicher sind, was Ihr Text qualifiziert, lassen Sie das optionale Feld leer.
Hinweis:
- Diese Methode gibt immer einen Text-Filtering-Dienst aufzurufen
- Diese Methode kann einen Service-Fehler werfen, der nicht behoben werden kann. Wenn diese Funktion einen Fehler wirft, versuchen Sie nicht, die Anfrage erneut zu versuchen; diese Methode implementiert seine eigene Wiederholungslogik intern. Wenn dieser Methode fehlerhaft ist, wird der Text nicht an jeden Benutzer angezeigt.
- Diese Methode wirft derzeit ab, wenn fromUserId nicht online auf dem aktuellen Server ist. Wir planen, Benutzer, die offline sind oder auf einem anderen Server in der Zukunft unterstützen zu können.
Parameter
Der Text, der gefiltert werden soll.
Die UserID des Spielers, der den Text filtert.
Der Kontext, in dem der gefilterte Nachrichten verwendet wird.
Rückgaben
Code-Beispiele
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
Kehre eine Tabelle zurück, die den Namen und Gesichter einer Schriftartfamilie enthält.
Die zurückgegebene Tabelle ist wie folgt strukturiert:
type FaceInfo = {Name: string, -- Beispiele: "Regular", "Book", "Italic", "Thin Italic"Weight: Enum.FontWeight,Style: Enum.FontStyle, -- Standard oder Italic}type FamilyInfo = {Name: string, -- Beispiele: "Source Sans Pro", "Grenze Gotisch"Faces: {FaceInfo} -- Es gibt immer mindestens 1, aber es kann bis zu 18 geben.}
Wenn die Schriftfamilie bereits durch einen früheren Aufruf zu GetFamilyInfoAsync geladen wurde, ContentProvider:PreloadAsync() oder ein Textobjekt mit der Eigenschaft TextLabel.FontFace festlegen, dann gibt die Methode ohne Ausgabe zurück.
Fehler
Diese Methode kann aufgrund von Netzwerkfehlern fehlen. Du solltest sie immer in einem pcall um Fehlerbehandlung einwickeln.
Wirft in diesen Szenarien einen Fehler:
- Die übergebene Familie ist eine leere String.
- Das Herunterladen der Familie ist fehlgeschlagen.
- Die Asset-ID ist ungültig oder verweist auf ein Asset, das nicht existiert.
Parameter
Asset-ID der Schriftart, die gesucht werden soll.
Rückgaben
Die Informationen über die Schriftartfamilie.
Code-Beispiele
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 zu TextService:GetTextSize() , aber verwendet das Font -Objekt anstelle von Enum.Font, was Zugriff auf mehr Schriften hat.
Wird verwendet, um zu messen, wie groß einige Textzeilen wie die Strings, Größen und Schriften sein werden.
Dies ist eine Yield-Funktion, da einige Schriften geladen werden müssen, um sie zu messen. Wenn die Schriftart bereits geladen ist, wird sie nicht Yield. ContentProvider:PreloadAsync() kann verwendet werden, um sicherzustellen, dass eine Schriftart geladen wird.
Fehler
Diese Methode kann aufgrund von Netzwerkfehlern fehlen. Du solltest sie immer in einem pcall um Fehlerbehandlung einwickeln.
Wirft in diesen Szenarien einen Fehler:
- Die GetTextBoundsParams.Font hat eine leere Familie.
- Das params-Argument war null.
- Die Schriftfamilie oder Schriftartgesicht konnte nicht herunterladenwerden.
Parameter
Eine Verweisung auf ein GetTextBoundsParams Objekt.
Rückgaben
Code-Beispiele
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)