TextService
*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.
Usługa TextService jest usługą wewnętrznie odpowiedzialną za obsługę wyświetlania tekstu w gra.
Klasa ta ma dwie funkcje członków:
Funkcja TextService:GetTextSize() daje programistom możliwość obliczenia przestrzeni potrzebnej do konkretnego tekstu z określonym formatowaniem, zwracając rozmiar piksela Vector2.
Funkcja TextService:FilterStringAsync() jest wymagana do prawidłowego filtrowania tekstu określonego przez użytkownika (takiego jak wiadomości czatu lub inne wejścia) w interesach bezpieczeństwa użytkownika.Twórcy nie korzystający z domyślnego Roblox Chat lub pozwalający użytkownikom inaczej wprowadzać tekst muszą używać tej funkcji.
Podsumowanie
Metody
Oblicza wymiary Vector2 (w pikselach), które zostaną wzięte z tekstem przy użyciu określonych parametrów formatowania i ograniczeń rozmiaru.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
Tłumaczenie czatu nie jest wspierane w starszej czacie. Ta metoda nie jest już wspierana i nie powinna być używana.
- FilterStringAsync(stringToFilter : string,fromUserId : number,textContext : Enum.TextFilterContext):TextFilterResult
Filtruje strunę otrzymywaną od użytkownika i zwraca TextFilterResult, którą można wykorzystać do rozpowszechniania poprawnie przefiltrowanego tekstu odpowiednio.
Zwraca tabelę zawierającą nazwę i twarze rodziny czcionek.
Oblicza szerokość i wysokość tekstu podanych parametrów.
Właściwości
Metody
GetTextSize
Oblicza wymiary Vector2 (w pikselach), które zostaną wzięte z tekstem przy użyciu określonych parametrów formatowania i ograniczeń rozmiaru.
Uwaga: parametr rozmiaru czcionki nie zaakceptuje Enum.FontSize Enum.Zamiast tego należy użyć rozmiaru całkowitego odpowiadającego Enum.FontSize Enum.Nie jest to równe wartości Enum.FontSize Enum.Na przykład, dla rozmiaru11 czcionki, należy użyć liczby całkowitej 11.
Funkcja ta jest użyteczną alternatywą dla właściwości TextLabel.TextBounds i TextLabel oraz TextButton obiektów.Używanie właściwości TextLabel.TextBounds do obliczania tekstu wymiarów jest często niepraktyczne, ponieważ wymaga stworzenia obiektu TextLabel.
Z GetTextSize wymiary wymagane przez określony ciąg tekstu w określonym TextLabel lub TextButton można obliczyć przed utworzeniem dowolnego obiektu lub ustawiaćwłaściwości tekstu.
Zaleca się programistom dodanie piksela spacji do wyniku, aby zapewnić, że żaden tekst nie został wyłączone.
Ta metoda jest ograniczona do tylko czcionek wymienionych w Enum.Font. Aby uzyskać dostęp do większej liczby czcionek, możesz użyć TextService:GetTextBoundsAsync() zamiast tego.
Parametry
Sznurek, dla którego ma być obliczona wielkość tekstu.
Całkowita liczba reprezentująca rozmiar czcionki używana.
Font użyty.
The TextLabel.AbsoluteSize z obiektu tekstowego, który ma być użyty. Wymagane do obliczenia, w jaki sposób tekst się zwinie.
Zwroty
Rozmiar przestrzeni wymaganej, w pikselach, przez ciąg z określonym formatowaniem.
Przykłady kodu
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
Tłumaczenie czatu nie jest wspierane w starszej czacie.Ta metoda nie jest już wspierana i nie powinna być używana.Wszystkie wezwania zwracają pusty obiekt.Tłumienie wiadomości czatu jest dostępne tylko za pośrednictwem TextChatService.
Parametry
Zwroty
FilterStringAsync
Funkcja FilterStringAsync filtruje strunę otrzymywaną od użytkownika, używając TextService , i zwraca TextFilterResult , którą można wykorzystać do rozpowszechniania poprawnie przefiltrowanego tekstu odpowiednio.
Użycie
Ta metoda powinna być wywołana raz za każdym razem, gdy użytkownik wysyła wiadomość.Nie przechowuj wyników tej funkcji w pamięci podręcznej i ponownie ich używaj do oddzielnych wiadomości.Jeśli użytkownik wysyła ten sam tekst wielokrotnie, metoda ta musi być ponownie wywołana za każdym razem, gdy wysyłana jest wiadomość.Jeśli wyniki są przechowywane w pamięci podręcznej i ponownie wykorzystywane do wykrywania spamu i wielu form filtrowania świadomego kontekstu zostaną złamane i potencjalnie zagrożone bezpieczeństwo użytkownika.Gry, które nieprawidłowo wykorzystują wyniki zapisane w pamięci, mogą mieć do czynienia z moderacją.
Zachęca się jednak do utrzymywania tych obiektów wynikowych, aby wyświetlać te same wiadomości użytkownikom, którzy dołączają do serwera później.Na przykład: można go użyć do bezpiecznego i wydajnego wdrożenia dziennika czatu serwera, który zawsze stosuje najmniej restrykcyjne filtrowanie dla użytkowników, którzy dołączają później, lub do wydajnego wyświetlania tekstu, takiego jak nazwa zwierzaka, dla użytkownika, który dołącza do gry po tym, jak zwierzak został po raz pierwszy wygenerowany i nazwany.
Opcjonalny parametr Enum.TextFilterContext nie wpłynie na filtrowany wynik zapytania. Ta wartość zostanie wykorzystana do poprawy filtrowania tekstu w Roblox.
Prywatny tekst to wszystko, co widzą tylko konkretni gracze, a nie każdy gracz.Na przykład, jeśli czat jest widziany przez pojedynczego gracza lub przez wybraną grupę graczy, 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 twój tekst kwalifikuje się jako, pozostaw puste pole opcjonalne.
Uwaga:
- Ta metoda zawsze zwraca połączenie z usługą filtrowania tekstu
- Ta metoda może wystrzelić, jeśli wystąpi błąd prośba, który nie może zostać rozwiązany.Jeśli ta funkcja wystrzeliwuje błąd, nie próbuj ponownie wysłać żądania; ta metoda implementuje własną logikę odnowienia wewnętrznie.Jeśli ta metoda zawodzi, nie wyświetlaj tekstu żadnemu użytkownikowi.
- Ta metoda obecnie rzuca, jeśli z użytkownikiem nie jest online na obecnym serwerze.Planujemy w przyszłości wspierać użytkowników, którzy są offline lub na innym serwerze.
Parametry
Tekst, który ma zostać przefiltrowany.
ID gracza filtrującego tekst.
Kontekst, w którym przefiltrowana wiadomość zostanie wykorzystana.
Zwroty
Przykłady kodu
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
Zwraca tabelę zawierającą nazwę i twarze rodziny czcionek.
Zwrócony stół jest strukturyzowany w ten sposób:
type FaceInfo = {Name: string, -- Przykłady: "Regular", "Książka", "Italic", "Thin Italic"Weight: Enum.FontWeight,Style: Enum.FontStyle, -- Albo normalne, albo włoskie}type FamilyInfo = {Name: string, -- Przykłady: "Source Sans Pro", "Grenze Gotisch"Faces: {FaceInfo} -- Zawsze jest co najmniej 1, ale może być do 18.}
Jeśli rodzina czcionek została już załadowana przez poprzednie wezwanie do GetFamilyInfoAsync , ContentProvider:PreloadAsync() lub obiekt tekstowy z ustawiaćwłaściwości TextLabel.FontFace, to metoda zwraca bez zatrzymywania.
Błędy
Ta metoda może zawieść z powodu błędów sieciowych. Zawsze powinieneś ją owinąć w pcall dla obsługi błędów.
Występuje błąd w tych scenariuszach:
- Przekazana rodzina to pusta ciąg.
- Pobieranie rodziny nie powiodło się.
- ID zasoby jest nieprawidłowe lub wskazuje na zasób, który nie istnieje.
Parametry
ID zasobu rodziny czcionek do wyszukania.
Zwroty
Informacje o rodzinie czcionek.
Przykłady kodu
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
Ta metoda jest podobna do TextService:GetTextSize() , ale używa obiektu Font zamiast Enum.Font, który ma dostęp do większej liczby czcionek.
Używany do mierzenia, jak duży będzie pewien tekst podany zestawem właściwości, takich jak ciąg, rozmiar i czcionka.
Jest to funkcja yield, ponieważ niektóre czcionki mogą musić zostać załadowane, aby je zmierzyć.Jeśli czcionka jest już załadowana, nie wygeneruje się.ContentProvider:PreloadAsync() można użyć, aby upewnić się, że czcionka została załadowana.
Błędy
Ta metoda może zawieść z powodu błędów sieciowych. Zawsze powinieneś ją owinąć w pcall dla obsługi błędów.
Występuje błąd w tych scenariuszach:
- The GetTextBoundsParams.Font ma pustą rodzinę.
- Argument params był nil.
- Nie udało się pobrać rodziny czcionek lub twarzy czcionki.
Parametry
Odwołanie do obiektu GetTextBoundsParams referencyjnego.
Zwroty
Przykłady kodu
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)