TextService
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Il TextService è un servizio responsabile internamente della gestione della visualizzazione del testo nel Gioco.
Questa classe ha due funzioni membro:
La funzione TextService:GetTextSize() fornisce agli sviluppatori la capacità di calcolare lo spazio richiesto per una determinata 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) per gli interessi della sicurezza dell'utente. Gli sviluppatori che non utilizzano il predefinito Roblox Chat , o consentono agli utenti di inserire in altro modo il testo devono utilizzare questa funzione.
Sommario
Proprietà
Metodi
Calcola le dimensioni Vector2 (in pixel) che saranno prese con il testo quando si utilizzano i parametri di formattazione specificati e le limitazioni di dimensioni.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
La traduzione della 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
Filtra una stringa che viene ricevuta da un utente e restituisce un TextFilterResult che può essere utilizzato per distribuire il testo correttamente filtrato di conseguenza.
Restituisce una tabella che contiene il nome e le facce di una famiglia di caratteri.
Calcola la larghezza e l'altezza del testo dei parametri forniti.
Proprietà
Metodi
GetTextSize
Calcola le dimensioni Vector2 (in pixel) che saranno prese con il testo quando si utilizzano i parametri di formattazione specificati e le limitazioni di dimensioni.
Nota, il parametro fontSize non accetterà il Enum.FontSize 枚. Invece, la dimensione dell'intero Enum.FontSize 枚 dovrebbe essere utilizzata. Questo non è uguale al valore del Enum.FontSize 枚. Ad esempio, per il 2> Size122> font, la dimensione 5>1
Questa funzione è un'alternativa utile alla proprietà TextLabel.TextBounds della classe Class.Text e agli oggetti TextLabel . L'uso della proprietà TextButton per calcolare le dimensioni del testo richiede spesso è impractical poiché richiede che un oggetto 1> Class.Text
Con GetTextSize, le dimensioni richieste da una determinata stringa di testo in una determinata TextLabel o TextButton possono essere calcolate prima che qualsiasi oggetto venga creato o Impostarela proprietà di testo.
Gli sviluppatori sono consigliati di aggiungere un pixel di spazio vuoto al risultato per assicurarsi che nessun testo venga Off.
Questo metodo è limitato solo alle caratteri che sono elencate in Enum.Font . Per ottenere l'accesso a più caratteri, puoi usare TextService:GetTextBoundsAsync() invece.
Parametri
La stringa per la quale viene calcolata la dimensione del testo.
L'intero rappresentante la dimensione della font utilizzata.
Il carattere utilizzato.
Il TextLabel.AbsoluteSize del testo da utilizzare. Richiesto per calcolare come il testo si avvolgerà.
Restituzioni
La dimensione dello spazio richiesta, in pixel, dalla stringa con la formattazione specificata.
Campioni di codice
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 dovrebbe essere utilizzato. Tutte le chiamate restituiscono un oggetto vuoto. La traduzione dei messaggi di chat è disponibile solo attraverso TextChatService .
Parametri
Restituzioni
FilterStringAsync
La funzione FilterStringAsync filtra una stringa che viene ricevuta da un utente, utilizzando il TextService , e restituisce un TextFilterResult che può essere utilizzato per distribuire il testo correttamente filtrato in modo appropriato.
Uso
Questo metodo dovrebbe 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 test più volte questo metodo deve essere chiamato di nuovo ogni volta che il messaggio viene inviato. Se i risultati sono memorizzati e riutilizzati la rileva spam e molte forme di filtro potrebbero essere danneggiate e mettere in pericolo
Tuttavia, è incoraggiato mantenere questi oggetti 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 minimo restrizione per gli utenti che si uniscono più tardi, o per visualizzare in modo efficiente il testo come un nome di animale domestico a un utente che si unisce al gioco dopo che l'animale domestico è stato generato e il
Il parametro opzionale Enum.TextFilterContext non influisce sul risultato filtrato della Query. Questo valore sarà utilizzato per migliorare il filtro del testo di Roblox.
Il testo privato è qualsiasi cosa che venga visto solo da giocatori specifici, non da ogni Giocatore. Ad esempio, se la chat è vista da un solo Giocatore, o da un gruppo di giocatori selezionati, la chat è considerata Server privato. Chat per team o chat che potrebbe essere potenzialmente visibile a un gruppo più ampio, come il Server, è considerata pubblica. Se non sei sicuro di ciò che il tuo testo qualifichi, lascia il campo opzionale vuoto.
Nota:
- Questo metodo sempre rende per fare una chiamata di filtro del testo
- Questo metodo può essere lanciato se ciò che è un errore di servizio che non può essere risolto. Se questa funzione lancia un errore per favore non riprovare la Richiesta; questo metodo implementa la propria logica di riprova internamente. Se questo metodo fallisce non mostra il testo a qualsiasi utente.
- Questo metodo attualmente lancia se fromUserId non è online sul Serverattuale. Pianifichiamo di supportare gli utenti che sono offline o su un altro server in futuro.
Parametri
Il testo da filtrare.
L'ID utente del giocatore che filtra il testo.
Il contesto in cui verrà utilizzato il messaggio filtrato.
Restituzioni
Campioni di codice
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 le facce di una famiglia di caratteri.
La tabella restituita è strutturata come segue:
type FaceInfo = {Name: string, -- Esempi: "Regolare", "Book", "Italic", "Thin Italic"Weight: Enum.FontWeight,Style: Enum.FontStyle, -- Italic o Normale}type FamilyInfo = {Name: string, -- Esempi: "Source Sans Pro", "Grenze Gotisch"Faces: {FaceInfo} -- C'è sempre almeno 1, ma ci possono essere fino a 18.}
Se la famiglia di caratteri è già stata caricata da un precedente call to GetFamilyInfoAsync , ContentProvider:PreloadAsync() , o un oggetto di testo con la proprietà TextLabel.FontFace , allora il metodo restituisce senza rendere.
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.
- Download della famiglia non riuscito.
- L'ID risorsa non è valido o punta a una risorsa non esistente.
Parametri
ID risorsa della famiglia di caratteri per cercare.
Restituzioni
Le informazioni sulla famiglia di caratteri.
Campioni di codice
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ù caratteri.
Utilizzato per misurare la dimensione di alcuni testi con una serie di proprietà come la Stringa, la dimensione e il carattere.
Questa è una funzione di produzione poiché alcuni caratteri potrebbero essere caricati in modo da poter misurarli. Se il carattere è già caricato, non producirà. ContentProvider:PreloadAsync() può essere utilizzato per assicurarsi che un carattere sia 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 nullo.
- La famiglia di caratteri o la faccia del carattere non sono riusciti a scaricare.
Parametri
Un riferimento a un oggetto GetTextBoundsParams .
Restituzioni
Campioni di codice
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)