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 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

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

string: string

Die Strings für die die Textgröße berechnet werden soll.

fontSize: number

Die Zahl, die die verwendete Schriftgröße repräsentiert.

font: Enum.Font

Die verwendete Schriftart.

frameSize: Vector2

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

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 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

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

Rückgaben

FilterStringAsync

Angehalten

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

stringToFilter: string

Der Text, der gefiltert werden soll.

fromUserId: number

Die UserID des Spielers, der den Text filtert.

Der Kontext, in dem der gefilterte Nachrichten verwendet wird.

Standardwert: "PrivateChat"

Rückgaben

Code-Beispiele

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

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

assetId: ContentId

Asset-ID der Schriftart, die gesucht werden soll.


Rückgaben

Die Informationen über die Schriftartfamilie.

Code-Beispiele

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 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

Die Größe des Textes als Vector2.

Code-Beispiele

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
font: Enum.Font

Rückgaben

Ereignisse