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 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

Metodi

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

string: string

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

fontSize: number

L'intero rappresentante la dimensione della font utilizzata.

font: Enum.Font

Il carattere utilizzato.

frameSize: Vector2

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

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 dovrebbe essere utilizzato. Tutte le chiamate restituiscono un oggetto vuoto. La traduzione dei messaggi di chat è disponibile solo attraverso TextChatService .

Parametri

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

Restituzioni

FilterStringAsync

Resa

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

stringToFilter: string

Il testo da filtrare.

fromUserId: number

L'ID utente del giocatore che filtra il testo.

Il contesto in cui verrà utilizzato il messaggio filtrato.

Valore predefinito: "PrivateChat"

Restituzioni

Campioni di codice

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 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

assetId: ContentId

ID risorsa della famiglia di caratteri per cercare.


Restituzioni

Le informazioni sulla famiglia di caratteri.

Campioni di codice

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ù 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

La dimensione del testo come Vector2 .

Campioni di codice

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
font: Enum.Font

Restituzioni

Eventi