TextService

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Nicht erstellbar
Dienst
Nicht repliziert

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

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

string: string

Der Text, für den die Textgröße berechnet werden soll.

Standardwert: ""
fontSize: number

Die Zahl, die die verwendete Schriftgröße darstellt.

Standardwert: ""
font: Enum.Font

Die verwendete Schriftart.

Standardwert: ""
frameSize: Vector2

Das TextLabel.AbsoluteSize des Textobjekts, das verwendet werden soll. Erforderlich, um zu berechnen, wie der Text umwickelt wird.

Standardwert: ""

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.

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

Angehalten

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

stringToFilter: string
Standardwert: ""
fromUserId: number
Standardwert: ""
targetLocales: Array
Standardwert: ""
Standardwert: "PrivateChat"

Rückgaben

FilterStringAsync

Angehalten

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

stringToFilter: string

Der Text, der gefiltert wird.

Standardwert: ""
fromUserId: number

Die ID des Spielers, der den Text filtert.

Standardwert: ""

Der Kontext, in dem die gefilterte Nachricht verwendet wird.

Standardwert: "PrivateChat"

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.

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

Angehalten

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

assetId: ContentId

Asset-ID der Schriftfamilie, die abgerufen werden soll.

Standardwert: ""

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.

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

Angehalten

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.

Standardwert: ""

Rückgaben

Die Größe des Textes als Vector2.

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.

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

Angehalten

Parameter

fontSize: number
Standardwert: ""
font: Enum.Font
Standardwert: ""

Rückgaben

Ereignisse