TextService
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Il TextService è un servizio internamente responsabile per la gestione della visualizzazione del testo nel Gioco.
Questa classe ha due funzioni membro:
La funzione TextService:GetTextSize() dà agli sviluppatori la possibilità di calcolare lo spazio necessario per una specifica stringa di testo con formattazione specificata, restituendo una dimensione di pixel Vector2 .
La funzione TextService:FilterStringAsync() è richiesta per filtrare correttamente il testo specificato dall'utente (come messaggi di chat o altri input) negli interessi della sicurezza dell'utente.Gli sviluppatori che non utilizzano il predefinito Roblox Chat o consentono agli utenti di inserire altrimenti il testo devono utilizzare questa funzione.
Sommario
Proprietà
Metodi
Calcola le dimensioni Vector2 (in pixel) che verranno occupate con il testo quando si utilizzano i parametri di formattazione e le restrizioni di dimensione specificati.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
La traduzione del chat non è supportata nella chat legacy. Questo metodo non è più supportato e non dovrebbe essere utilizzato.
- FilterStringAsync(stringToFilter : string,fromUserId : number,textContext : Enum.TextFilterContext):TextFilterResult
Filtri una stringa ricevuta da un utente e restituisce un TextFilterResult che può essere utilizzato per distribuire il testo filtrato correttamente in conseguenza.
Restituisce una tabella che contiene il nome e i volti di una famiglia di caratteri.
Calcola la larghezza e l'altezza del testo dai parametri forniti.
Proprietà
Metodi
GetTextSize
Calcola le dimensioni Vector2 (in pixel) che verranno occupate con il testo quando si utilizzano i parametri di formattazione e le restrizioni di dimensione specificati.
Nota, il parametro fontSize non accetterà l'Enum Enum.FontSize.Invece la dimensione intera corrispondente con il Enum.FontSize Enum dovrebbe essere utilizzata.Questo non è uguale al valore del Enum.FontSize Enum.Ad esempio, per la dimensione11 font, l'intero 11 deve essere utilizzato.
Questa funzione è una alternativa utile alla proprietà TextLabel.TextBounds dei oggetti TextLabel e TextButton.L'utilizzo della proprietà TextLabel.TextBounds per calcolare il testo delle dimensioni richiede spesso è poco pratico poiché richiede un oggetto TextLabel da creare.
Con GetTextSize, le dimensioni richieste da una particolare stringa di testo in una particolare TextLabel o TextButton possono essere calcolate prima di creare qualsiasi oggetto o Impostarela proprietà del testo.
Si consiglia agli sviluppatori di aggiungere un pixel di spazio alla risposta per garantire che nessun testo venga Off.
Questo metodo è limitato solo a font elencati in Enum.Font . Per accedere a più font, puoi usare TextService:GetTextBoundsAsync() invece.
Parametri
La stringa per la quale viene calcolata la dimensione del testo.
L'intero che rappresenta la dimensione del carattere utilizzata.
Il carattere utilizzato.
Il TextLabel.AbsoluteSize del oggetto di testo da utilizzare. Richiesto per calcolare come verrà avvolto il testo.
Restituzioni
La dimensione dello spazio richiesto, in pixel, dalla stringa con il formato specificato.
Campioni di codice
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
La traduzione della chat non è supportata nella chat legacy.Questo metodo non è più supportato e non deve essere utilizzato.Tutte le chiamate restituiscono un oggetto vuoto.La traduzione dei messaggi di chat è disponibile solo tramite TextChatService .
Parametri
Restituzioni
FilterStringAsync
La funzione FilterStringAsync filtra una stringa ricevuta da un utente, usando il TextService , e restituisce un TextFilterResult che può essere utilizzato per distribuire il testo correttamente filtrato in conseguenza.
Uso
Questo metodo deve essere chiamato una volta ogni volta che un utente invia un Messaggio.Non memorizzare i risultati di questa funzione e riutilizzarli per messaggi separati.Se un utente invia lo stesso testo più volte questo metodo deve essere chiamato nuovamente ogni volta che viene inviato il messaggio.Se i risultati vengono memorizzati in cache e riutilizzati, la rilevazione dello spam e molte forme di filtraggio consapevole del contesto verranno interrotte e potrebbero mettere a rischio la sicurezza degli utenti.I giochi che utilizzano in modo improprio i risultati memorizzati in cache possono essere soggetti a moderazione.
Tuttavia, è incoraggiato a mantenere questi oggetti di risultato per visualizzare lo stesso messaggio agli utenti che si uniscono al server più tardi.Ad esempio: questo può essere utilizzato per implementare in modo sicuro e efficiente un registro di chat del server che utilizza sempre il filtro di filtraggio meno restrittivo per gli utenti che si uniscono più tardi, o per visualizzare in modo efficiente il testo come un nome di animale per un utente che si unisce al gioco dopo che l'animale è stato generato per la prima volta e il nome è stato filtrato.
Il parametro opzionale Enum.TextFilterContext non influirà sul risultato filtrato della Query. Questo valore verrà utilizzato per migliorare il filtraggio del testo di Roblox.
Il testo privato è tutto ciò che viene visto solo da giocatori specifici, piuttosto che da ogni Giocatore.Ad esempio, se la chat viene vista da un singolo Giocatoreo da un gruppo selezionato di giocatori, la chat viene considerata Server privato.La chat per le squadre o la chat che è potenzialmente visibile a un Gruppopiù ampio, come il Server, è considerata pubblica.Se non sei sicuro di ciò che il tuo testo si qualifica come, lascia il campo opzionale vuoto.
Nota:
- Questo metodo produce sempre per fare una chiamata al servizio di filtraggio del testo
- Questo metodo può lanciare se c'è un errore di servizio che non può essere risolto.Se questa funzione lancia un errore non riprova la Richiesta; questo metodo implementa la propria logica di riprova internamente.Se questo metodo fallisce non visualizzare il testo a nessun utente.
- Questo metodo attualmente lancia se da uuid non è online sul Serverattuale.Pianifichiamo di supportare gli utenti che sono offline o su un server diverso in futuro.
Parametri
Il testo da filtrare.
L'ID del giocatore che filtra il testo.
Il contesto in cui verrà utilizzato il messaggio filtrato.
Restituzioni
Campioni di codice
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
Restituisce una tabella che contiene il nome e i volti di una famiglia di caratteri.
La tabella restituita è strutturata come segue:
type FaceInfo = {Name: string, -- Esempi: "Regolare", "Libro", "Italico", "Sottile Italico"Weight: Enum.FontWeight,Style: Enum.FontStyle, -- Oppure Normale o Italico}type FamilyInfo = {Name: string, -- Esempi: "Source Sans Pro", "Grenze Gotisch"Faces: {FaceInfo} -- C'è sempre almeno 1, ma può esserci fino a 18.}
Se la famiglia di caratteri è già stata caricata da una chiamata precedente a GetFamilyInfoAsync , ContentProvider:PreloadAsync() , o un oggetto di testo con la proprietà TextLabel.FontFace , il metodo restituisce senza cedere.
Errori
Questo metodo può fallire a causa di errori di rete. Dovresti sempre avvolgerlo in un pcall per la gestione degli errori.
Lancia un'errore in questi scenari:
- La famiglia passata è una Stringavuota.
- Il download della famiglia è fallito.
- L'ID risorsa non è valido o punta a una risorsa che non esiste.
Parametri
ID risorsa della famiglia di caratteri da cercare.
Restituzioni
Le informazioni sulla famiglia di caratteri.
Campioni di codice
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
Questo metodo è simile a TextService:GetTextSize() , ma utilizza l'oggetto Font invece di Enum.Font , che ha accesso a più font.
Utilizzato per misurare quanto grande un testo sarà dato un insieme di proprietà come la Stringa, la dimensione e il carattere.
Questa è una funzione di yield perché alcuni caratteri potrebbero dover essere caricati per misurarli.Se il carattere è già caricato, non produrrà.ContentProvider:PreloadAsync() può essere utilizzato per assicurarsi che un carattere venga caricato.
Errori
Questo metodo può fallire a causa di errori di rete. Dovresti sempre avvolgerlo in un pcall per la gestione degli errori.
Lancia un'errore in questi scenari:
- Il GetTextBoundsParams.Font ha una famiglia vuota.
- L'argomento params era nil.
- La famiglia di caratteri o la faccia del carattere non è riuscita a scaricare.
Parametri
Un riferimento a un oggetto GetTextBoundsParams di riferimento.
Restituzioni
Campioni di codice
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)