TextService

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Brak możliwości tworzenia
Usługa
Bez replikacji

TextService jest usługą wewnętrznie odpowiedzialną za przetwarzanie wyświetlenia tekstu w gra.

Ta klasa ma dwa funkcje członka:

Funkcja TextService:GetTextSize() daje rozwój programistom możliwości obliczenia ilości miejsca wymaganego do określonego łańcucha tekstu z określonym ułożeniem, zwracając rozmiar Vector2 piksela.

Funkcja TextService:FilterStringAsync() jest wymagana do właściwego filtrowania tekstu użytkownika (takiego jak wiadomości czatu lub inne wpisy) w interesie bezpieczeństwa użytkownika. Rozwój nie używający domyślnego Chat , lub umożliwiającego użytkownikom wpisywanie innego tekstu, musi używać tej funkcji.

Podsumowanie

Metody

Właściwości

Metody

GetTextSize

Oblicza wymiary Vector2 (w pikselach), które zostaną zabrane w tekście, gdy zostaną użyte parametry i ograniczenia rozmiarowe określone.

Uwaga, parametr fontSize nie zaakceptuje Enum.FontSizeenum. Zamiast tego rozmiar znależący się zgodnie z Enum.FontSizeenum powinien być używany. Nie jest to równoznaczne z wartością Enum.FontSizenum. Dla przykładu, dla 2> rozmiar122> font, rozmi

Funkcja ta jest użyteczną alternatywą dla właściwości TextLabel.TextBounds i TextLabel obiektów. Używając właściwości TextButton do obliczenia wymiarów tekstu wymaga czasochłonnego, ponieważ wymaga stworzenia obiektu

Z GetTextSize można obliczyć wymiary wymaganego przez określony wiersz tekstowy w określonym TextLabel lub TextButton przed utworzeniem dowolnego obiektu lub ustawiaćwłaściwości tekstu.

Rozwijać zaleca się dodać pikselu poduszki do wyniku, aby upewnić się, że żaden tekst nie zostanie wyłączone.

Ten metod jest ograniczony do tylko czcionek, które są wymienione w Enum.Font. Aby uzyskać dostęp do więcej czcionek, możesz użyć TextService:GetTextBoundsAsync() zamiast tego.

Parametry

string: string

Strona, dla której rozmiar tekstu należy obliczyć.

fontSize: number

Liczba liczby przedstawiająca rozmiar czcionki użytej.

font: Enum.Font

Użyto czcionki.

frameSize: Vector2

Class.TextLabel.AbsoluteSize tekstu, aby użyć. Wymagane do obliczenia, jak tekst będzie się zwinąć.


Zwroty

Rozmiar przestrzeni wymaganego, w pikselach, przez strungę z określonym formatowaniem.

Przykłady kodu

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

Wynik

Tłumaczenie czatu nie jest wspierane w czacie legacy. Ta metoda nie jest już wspierana i nie należy jej używać. Wszystkie wezwania zwracają pusty obiekt. Tłumaczenie czatów jest dostępne tylko za pośrednictwem TextChatService.

Parametry

stringToFilter: string
fromUserId: number
targetLocales: Array
Wartość domyślna: "PrivateChat"

Zwroty

FilterStringAsync

Wynik

Funkcja FilterStringAsync przetwarza stronę otrzymywaną od użytkownika, używając TextService, a następnie w zwrotuje TextFilterResult, które można użyć do dystrybucji tekstu sfiltrowanego poprawnie.

Użyj

Ten metod powinien zostać wykonany raz za każdym razem, gdy użytkownik wysyła wiadomość. Nie przechowywaj wyników tej funkcji i ponownie używaj ich do oddzielnych wiadomości. Jeśli użytkownik wysyła ten sam tekst wiele razy, ten metod musi zostać ponownie wykonany za każdym razem, gdy wiadomość zostanie wysłana.

Jednak zaleca się utrzymywanie tych wyników, aby wyświetlić tę samą wiadomość dla użytkowników, którzy dołączą do serwera później. Na przykład: można użyć tego, aby bezpiecznie i skutecznie zaimplementować dziennik czatu, który zawsze używa najmniej restrykcyjnego filtrowania dla użytkowników, którzy dołączają później, lub aby skutecznie wy

Opcjonalny parametr Enum.TextFilterContext nie wpływa na wynik filtrowania zapytania. Ta wartość zostanie użyta do poprawy filtrowania tekstu w Roblox.

Prywatny tekst jest wszystkim, co widzieli tylko konkretni gracze, a nie każdy gracz. Na przykład, jeśli czat jest widziany przez jednego gracza, lub przez wybraną grupę graczy, to czat jest uważany za prywatne. Czat dla zespołów lub czat, który jest potencjalnie widoczny dla szerszej grupa, takiej jak serwer, jest uważany za publiczne. Jeśli nie jesteś pewien, co zakwal

Notatka:

  • Ten metodowy zawsze zwraca się, aby wykonać wezwanie usługi filtrowania tekstu
  • Ten metodowy może zrzucać, jeśli istnieje błąd usługi, który nie może być rozwiązany. Jeśli ta funkcja zrzuca błąd, nie próbuj ponownie wysyłania prośba; ten metodowy implementuje własną logikę ponownych prób wewnętrznie. Jeśli ten metodowy nie działa, nie wyświetlaj tekstu dla żadnego użytkownika.
  • Ten metodowy obecnie wyrzuca, jeśli fromUserId nie jest online na obecnym serwerze. Planujemy wspierać użytkowników, którzy są offline lub na innym serwerze w przyszłości.

Parametry

stringToFilter: string

Tekst do filtrowania.

fromUserId: number

Zidentyfikowanie gracza sfiltrowującego tekst.

Kontekst, w którym używany będzie filtrowany komunikat.

Wartość domyślna: "PrivateChat"

Zwroty

Przykłady kodu

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

Wynik

Wyświetla tabelę zawierającą nazwę i twarze rodziny czcionek.

Zwracany przez tabelę jest strukturyzowany tak:


type FaceInfo = {
Name: string, -- Przykłady: "Regular", "Book", "Italic", "Thin Italic"
Weight: Enum.FontWeight,
Style: Enum.FontStyle, -- Albo Normal albo Włoski
}
type FamilyInfo = {
Name: string, -- Przykłady: "Źródło Sans Pro", "Grenze Gotycz"
Faces: {FaceInfo} -- Zawsze jest co najmniej 1, ale może być do 18.
}

Jeśli rodzina czcionek została już załadowana przez poprzedni wezwanie do GetFamilyInfoAsync , ContentProvider:PreloadAsync() lub tekstowy obiekt z ustawieniem TextLabel.FontFace , metoda zwraca bez wyjścia.

Błędy

Ten metod może się zepsuć z powodu błędów sieci. Zawsze zapakowuj go w pcall dla kodeksu błędów.

Występuje błąd w tych scenariuszach:

  • Przekazana rodzina jest pustą ciąg.
  • Nie udało się wziąć danych rodziny.
  • Identyfikator zasobu jest nieprawidłowy lub wskazuje na zasób, który nie istnieje.

Parametry

assetId: ContentId

Idźcie o znakach, aby zobaczyć.


Zwroty

Informacje o rodzinie czcionek.

Przykłady kodu

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

Wynik

Ten metod jest podobny do TextService:GetTextSize() , ale używa obiektu Font zamiast Enum.Font, który ma dostęp do więcej czcionek.

Używany do pomiaru, jak duży niektóry tekst zostanie przydzielony zestaw cech, takich jak długość, ciągi czcionka.

To jest funkcja renderowania, ponieważ niektóre czcionki mogą wymagać ładowania, aby je zmierzyć. Jeśli czcionka jest już załadowana, to nie będzie renderowana. ContentProvider:PreloadAsync() można użyć, aby upewnić się, że czcionka jest załadowana.

Błędy

Ten metod może się zepsuć z powodu błędów sieci. Zawsze zapakowuj go w pcall dla kodeksu błędów.

Występuje błąd w tych scenariuszach:

  • Class.GetTextBoundsParams.Font ma pustą rodzinę.
  • Argument params był niewalidny.
  • Nie udało się zeskanować rodziny czcionek lub twarzy czcionek.

Parametry

Odnośnik do obiektu GetTextBoundsParams.


Zwroty

Rozmiar tekstu jako Vector2 .

Przykłady kodu

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

Wynik

Parametry

fontSize: number
font: Enum.Font

Zwroty

Zdarzenia