TextService

Visualizza obsoleti

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Non costruibile
Assistenza
Non Replicato

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

Metodi

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

string: string

La stringa per la quale viene calcolata la dimensione del testo.

Valore predefinito: ""
fontSize: number

L'intero che rappresenta la dimensione del carattere utilizzata.

Valore predefinito: ""
font: Enum.Font

Il carattere utilizzato.

Valore predefinito: ""
frameSize: Vector2

Il TextLabel.AbsoluteSize del oggetto di testo da utilizzare. Richiesto per calcolare come verrà avvolto il testo.

Valore predefinito: ""

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.

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

Resa

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

stringToFilter: string
Valore predefinito: ""
fromUserId: number
Valore predefinito: ""
targetLocales: Array
Valore predefinito: ""
Valore predefinito: "PrivateChat"

Restituzioni

FilterStringAsync

Resa

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

stringToFilter: string

Il testo da filtrare.

Valore predefinito: ""
fromUserId: number

L'ID del giocatore che filtra il testo.

Valore predefinito: ""

Il contesto in cui verrà utilizzato il messaggio filtrato.

Valore predefinito: "PrivateChat"

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.

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

Resa

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

assetId: ContentId

ID risorsa della famiglia di caratteri da cercare.

Valore predefinito: ""

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.

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

Resa

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.

Valore predefinito: ""

Restituzioni

La dimensione del testo come Vector2 .

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.

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

Resa

Parametri

fontSize: number
Valore predefinito: ""
font: Enum.Font
Valore predefinito: ""

Restituzioni

Eventi