TextService
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Dịch vụ TextService là một dịch vụ có trách nhiệm xử lý hiển thị văn bản trong trò chơi.
Lớp này có hai chức năng thành viên:
Chức năng TextService:GetTextSize() cho phép các nhà phát triển tính toán không gian cần thiết cho một chuỗi văn bản cụ thể với định dạng được chỉ định, trả về kích thước ảnh Vector2 .
Chức năng TextService:FilterStringAsync() là bắt buộc để lọc chính xác văn bản người dùng được chỉ định (như tin nhắn trò chuyện hoặc các đầu vào khác) trong lợi ích của an toàn người dùng.Các nhà phát triển không sử dụng mặc định Roblox Chat , hoặc cho phép người dùng nhập văn bản theo cách khác phải sử dụng chức năng này.
Tóm Tắt
Phương Pháp
Tính các chiều Vector2 (bằng像素) sẽ được lấy lên với văn bản khi sử dụng các tham số và giới hạn định dạng được chỉ định.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
Phiên dịch trò chuyện không được hỗ trợ trong trò chuyện cũ. Phương pháp này không còn được hỗ trợ và không nên được sử dụng.
- FilterStringAsync(stringToFilter : string,fromUserId : number,textContext : Enum.TextFilterContext):TextFilterResult
Lọc một chuỗi được nhận từ người dùng và trả về một TextFilterResult có thể được sử dụng để phân phối văn bản được lọc đúng theo sau đó.
Trả về một bảng chứa tên và khuôn mặt của một gia đình phông chữ.
Tính chiều rộng và chiều cao của văn bản cho các tham số được cung cấp.
Thuộc Tính
Phương Pháp
GetTextSize
Tính các chiều Vector2 (bằng像素) sẽ được lấy lên với văn bản khi sử dụng các tham số và giới hạn định dạng được chỉ định.
Lưu ý, tham số fontSize sẽ không chấp nhận Enum Enum.FontSize.Thay vào đó, kích thước số tương ứng với Enum.FontSize Enum nên được sử dụng.Điều này không bằng giá trị của Enum.FontSize Enum.Ví dụ, đối với Size11 phông chữ, số thực 11 nên được sử dụng.
Chức năng này là một lựa chọn hữu ích cho thuộc tính TextLabel.TextBounds của TextLabel và TextButton các đối tượng.Sử dụng thuộc tính TextLabel.TextBounds để tính toán văn bản kích thước yêu cầu thường không thực tế vì nó yêu cầu một đối tượng TextLabel được tạo.
Với GetTextSize, các chiều cần thiết cho một chuỗi văn bản cụ thể trong một TextLabel hoặc TextButton nhất định có thể được tính toán trước khi tạo hoặc thiết cài đặtbất kỳ đối tượng nào hoặc bộ tính chất văn bản.
Các nhà phát triển được khuyến khích thêm một пиксель кроки vào kết quả để đảm bảo không có chữ tắtbị cắt.
Phương pháp này chỉ giới hạn ở các phông chữ được liệt kê trong Enum.Font. Để truy cập vào nhiều phông chữ hơn, bạn có thể sử dụng TextService:GetTextBoundsAsync() thay thế.
Tham Số
Chuỗi mà kích thước văn bản sẽ được tính toán.
Số nguyên đại diện cho kích thước phông được sử dụng.
Phông chữ đã sử dụng.
The TextLabel.AbsoluteSize của đối tượng văn bản được sử dụng. Yêu cầu để tính toán cách văn bản sẽ bọc.
Lợi Nhuận
Kích thước của không gian cần thiết, bằng pixel, bởi chuỗi với định dạng được đặt.
Mẫu mã
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
Phiên dịch trò chuyện không được hỗ trợ trong trò chuyện di sản.Phương pháp này không còn được hỗ trợ và không nên được sử dụng.Tất cả các cuộc gọi trả về một đối tượng trống.Dịch tin nhắn trò chuyện chỉ khả dụng thông qua TextChatService .
Tham Số
Lợi Nhuận
FilterStringAsync
Chức năng FilterStringAsync lọc một chuỗi được nhận từ người dùng, sử dụng TextService , và trả về một TextFilterResult có thể được sử dụng để phân phối văn bản được lọc đúng theo sau đó
Sử dụng
Phương pháp này nên được gọi một lần mỗi khi người dùng gửi một tin nhắn.Không lưu trữ kết quả của chức năng này và sử dụng lại chúng cho các tin nhắn riêng biệt.Nếu một người dùng gửi cùng một văn bản nhiều lần, phương pháp này phải được gọi lại mỗi khi tin nhắn được gửi.Nếu kết quả được lưu trữ và tái sử dụng để phát hiện spam và nhiều hình thức lọc nhận thức về ngữ cảnh sẽ bị phá vỡ và có thể đặt an toàn của người dùng vào nguy cơ.Các trò chơi sử dụng không đúng kết quả lưu trữ có thể phải đối mặt với kiểm duyệt.
Tuy nhiên, khuyến khích giữ các đối tượng kết quả này để hiển thị cùng một thông điệp cho người dùng tham gia máy chủ sau đó.Ví dụ: bạn có thể sử dụng điều này để thực hiện an toàn và hiệu quả việc thiết lập một nhật ký trò chuyện máy chủ luôn luôn sử dụng bộ lọc hạn chế nhất cho người dùng tham gia sau này, hoặc để hiển thị hiệu quả văn bản như tên thú cưng cho một người dùng tham gia trò chơi sau khi thú cưng được sinh ra lần đầu tiên và tên bị lọc.
Tham số tùy chọn Enum.TextFilterContext sẽ không ảnh hưởng đến kết quả lọc của truy vấn. Giá trị này sẽ được sử dụng để cải thiện bộ lọc văn bản của Roblox.
Văn bản riêng tư là bất cứ thứ gì chỉ được nhìn thấy bởi những người chơi cụ thể, thay vì mọi người chơi.Ví dụ, nếu cuộc trò chuyện được xem bởi một người chơi duy nhất, hoặc bởi một nhóm người chơi được chọn, thì cuộc trò chuyện được coi là riêng tư.Trò chuyện cho các đội hoặc trò chuyện có thể nhìn thấy được cho một nhóm rộng hơn, chẳng hạn như máy chủ, được coi là công cộng.Nếu bạn không chắc chắn văn bản của bạn đủ điều kiện là gì, hãy để trống trường bắt buộc.
Ghi chú:
- Phương pháp này luôn luôn cho ra một cuộc gọi dịch vụ lọc văn bản
- Phương pháp này có thể ném nếu có lỗi dịch vụ không thể giải quyết được.Nếu chức năng này ném lỗi, xin đừng thử lại yêu cầu; phương pháp này thực hiện logic tái cố gắng riêng của nó bên trong.Nếu phương pháp này thất bại thì không hiển thị văn bản cho bất kỳ người dùng nào.
- Phương pháp này hiện tại ném nếu từ userId không ở trực tuyến trên máy chủ hiện tại.Chúng tôi dự định hỗ trợ người dùng đang ngoại tuyến hoặc trên một máy chủ khác trong tương lai.
Tham Số
Văn bản để lọc.
ID của người chơi lọc văn bản.
Những ngữ cảnh mà tin nhắn bị lọc sẽ được sử dụng trong.
Lợi Nhuận
Mẫu mã
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
Trả về một bảng chứa tên và khuôn mặt của một gia đình phông chữ.
Bảng trả về được cấu trúc như thế này:
type FaceInfo = {Name: string, -- Ví dụ: "Thông thường", "Sách", "Italic", "Thin Italic"Weight: Enum.FontWeight,Style: Enum.FontStyle, -- Hoặc bình thường hoặc Italic}type FamilyInfo = {Name: string, -- Ví dụ: "Source Sans Pro", "Grenze Gotisch"Faces: {FaceInfo} -- Luôn có ít nhất 1 nhưng có thể lên đến 18.}
Nếu gia đình phông chữ đã được tải bởi một cuộc gọi trước đó đến GetFamilyInfoAsync , ContentProvider:PreloadAsync() , hoặc một đối tượng văn bản với bộ thuộc cài đặtTextLabel.FontFace , thì phương thức trả về mà không từ bỏ.
Lỗi
Phương pháp này có thể thất bại do các lỗi mạng. Bạn nên luôn bọc nó trong một pcall để xử lý lỗi.
Ném một lỗi trong các trường hợp này:
- Gia đình đã truyền là một chuỗi trống.
- Tải xuống gia đình thất bại.
- ID tài sản không hợp lệ hoặc chỉ vào một tài sản không tồn tại.
Tham Số
ID tài sản của gia đình phông chữ để tìm kiếm.
Lợi Nhuận
Thông tin về gia đình phông.
Mẫu mã
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
Phương pháp này giống với TextService:GetTextSize() , nhưng sử dụng đối tượng Font thay vì Enum.Font , có quyền truy cập vào nhiều phông chữ hơn.
Dùng để đo lường kích cỡ một số văn bản sẽ được cung cấp một bộ các thuộc tính như chuỗi, kích cỡ và phông chữ.
Đây là một chức năng yield vì một số phông chữ có thể cần phải được tải để đo lường chúng.Nếu phông chữ đã được tải, thì nó sẽ không cho kết quả.ContentProvider:PreloadAsync() có thể được sử dụng để đảm bảo một phông chữ được tải.
Lỗi
Phương pháp này có thể thất bại do các lỗi mạng. Bạn nên luôn bọc nó trong một pcall để xử lý lỗi.
Ném một lỗi trong các trường hợp này:
- Các GetTextBoundsParams.Font có một gia đình trống.
- Argumen params đã là nil .
- Gia đình phông hoặc mặt phông không thể tải xuống.
Tham Số
Một tham chiếu đến một đối tượng GetTextBoundsParams .
Lợi Nhuận
Mẫu mã
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)