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.
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
Oblicza wymiary Vector2 (w pikselach), które zostaną zabrane w tekście, gdy zostaną użyte parametry i ograniczenia rozmiarowe określone.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
Tłumaczenie czatu nie jest wspierane w czacie legacy. Ta metoda nie jest już wspierana i nie należy jej używać.
- FilterStringAsync(stringToFilter : string,fromUserId : number,textContext : Enum.TextFilterContext):TextFilterResult
Sfiltrowuje otrzymywany od użytkownika strumień i w zwrotuje TextFilterResult, które można użyć do dystrybucji tekstu sfiltrowanego poprawnie.
Wyświetla tabelę zawierającą nazwę i twarze rodziny czcionek.
Oblicza szerokość i wysokość podanych parametrów tekstu.
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
Strona, dla której rozmiar tekstu należy obliczyć.
Liczba liczby przedstawiająca rozmiar czcionki użytej.
Użyto czcionki.
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
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 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
Zwroty
FilterStringAsync
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
Tekst do filtrowania.
Zidentyfikowanie gracza sfiltrowującego tekst.
Kontekst, w którym używany będzie filtrowany komunikat.
Zwroty
Przykłady kodu
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
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
Idźcie o znakach, aby zobaczyć.
Zwroty
Informacje o rodzinie czcionek.
Przykłady kodu
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
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
Przykłady kodu
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)