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.
TextService là một dịch vụ chịu trách nhiệm nội bộ về việc xử lý hiển thị của văn bản trong trò chơi.
Lớp này có hai chức năng thành viên:
Hàm TextService:GetTextSize() cho phép những nhà phát triển có thể tính toán kích thước không gian cần thiết cho một dòng chữ cụ thể với hình dạng được quy định, trả lại kích thước khối Vector2 .
Hàm TextService:FilterStringAsync() được yêu cầu để lọc chính xác nội dung người dùng (như thông điệp trò chuyện hoặc các nhập nhập khác) trong lợi ích của người an toàn. Các nhà phát triển không sử dụng mặc định của Roblox Class.Trò chuyện
Tóm Tắt
Phương Pháp
Tính các chiều Vector2 (trong pixel) mà sẽ được lấy khi sử dụng các tham số biểu tượng và hạn chế kích thước.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
Không hỗ trợ dịch trong chat truyền thống. Phương thức này không còn được hỗ trợ và 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ừ một người dùng, và trả lại một TextFilterResult để có thể sử dụng để phân phối chính xác nội dung đã lọc.
Trả lại một bảng chứa tên và mặt của một gia tài chữ.
Tính chiều rộng và chiều cao của các biến đã được cung cấp.
Thuộc Tính
Phương Pháp
GetTextSize
Tính các chiều Vector2 (trong pixel) mà sẽ được lấy khi sử dụng các tham số biểu tượng và hạn chế kích thước.
Lưu ý, tham số fontSize sẽ không chấp nhận Enum.FontSize Amount. Thay vào đó, kích thước số đo tương ứng với Enum.FontSize Amount được sử dụng. Điều này không bằng v
Hàm này là một lựa chọn hữu ích cho Class.TextLabel thuộc tính TextLabel.TextBounds và Class.TextButton đối tượng. Sử dụng các thuộc tính TextLabel để tính kích thước text thường là khô
Với GetTextSize, các kích thước yêu cầu bởi một dòng chữ cụ thể trong một dòng chữ cụ thể TextLabel hoặc TextButton có thể được tính trước khi bất kỳ đối tượng nào được tạo hoặc thiết cài đặtthuộc tính text.
Những nhà phát triển được khuyến nghị thêm một pixel đệm vào kết quả để đảm bảo không có văn tắtbị cắt.
Phương thức này chỉ áp dụng cho các bộ chữ được liệt kê trong Enum.Font. Để có được quyền truy cập vào nhiều bộ chữ hơn, bạn có thể sử dụng TextService:GetTextBoundsAsync() thay vào đó.
Tham Số
Chuỗi cho kích thước văn bản để được tính.
Số đại diện cho kích thước chữ được sử dụng.
Font đã được sử dụng.
Cỡ 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 text sẽ cuộn.
Lợi Nhuận
Kích thước của không gian cần thiết, bằng pixel, theo dòng với hình dạng được xác định.
Mẫu mã
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
Không hỗ trợ dịch trong chat lãnh thừa. Phương thức này không còn được hỗ trợ và nên được sử dụng. Tất cả các cuộc gọi đều trả về một đối tượng rỗ trống. Việc dịch các thông điệu trò chuyện chỉ khả dụng thông qua TextChatService .
Tham Số
Lợi Nhuận
FilterStringAsync
Hàm FilterStringAsync lọc một chuỗi được nhận từ một người, bằng cách sử dụng TextService , và trả lại một TextFilterResult để có thể phân phối chính xác chuỗi đó.
Sử dụng
Phương thức này nên được gọi một lần mỗi lần một người gửi một thông tin nhắn. Đừng lưu kết quả của hàm này và sử dụng chúng cho các thông điệp riêng biệt. Nếu một người gửi cùng một thông đi
Tuy nhiên, khuyến nghị bạn giữ các kết quả này để hiển thị cùng một thông điệp cho người dùng tham gia vào máy chủ sau đó. Ví dụ: nó có thể được sử dụng để an toàn và hiệu quả thực hiện một máy chủ chat log luôn sử dụng lọc ít hạn chế nhấ
Tham số bắt buộc 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 việc lọc văn bản của Roblox.
Văn bản riêng công cộnglà bất kỳ thứ gì được xem chỉ bởi một số người chơi cụ thể, chứ không phải bất kỳ người chơi nào. Ví dụ, nếu 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
Ghi chú:
- Phương thức này luôn được tạo ra để tạo một cuộc gọi lọc văn bản
- Phương pháp này có thể ném nếu có một lỗi dịch vụ không thể được giải quyết. Nếu chức năng này ném một lỗi xin vui lòng không thử lại yêu cầu; phương pháp này thực hiện các thuật tự động tái thử bên trong. Nếu phương pháp này thất bại không hiển thị chữ về bất kỳ người dùng n
- Phương thức này hiện đã throw if fromUserId không online trên máy chủ hiện tại. Chúng tôi dự định hỗ trợ người dùng nếu đang ngoại tuyến hoặc ở một máy chủ khác trong tương lai.
Tham Số
Văn bản để lọc.
ID người chơi lọc văn bản.
Những gì context đã lọc tin nhắn sẽ được sử dụng.
Lợi Nhuận
Mẫu mã
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ả lại một bảng chứa tên và mặt của một gia tài chữ.
Bảng trả về được cấu trúc như thế này:
type FaceInfo = {Name: string, -- Ví dụ: "Regular", "Book", "Italic", "Thin Italic"Weight: Enum.FontWeight,Style: Enum.FontStyle, -- Italic hoặc Normal}type FamilyInfo = {Name: string, -- Ví dụ: "Source Sans Pro", "Grenze Gotisch"Faces: {FaceInfo} -- Luôn luôn có ít nhất 1 nhưng có thể lên đến 18.}
Nếu gia tài chữ đã được tải bởi một cuộc gọi trước đó để GetFamilyInfoAsync , ContentProvider:PreloadAsync() , hoặc một đối tượng chữ với bộ độ TextLabel.FontFace đã được thiết cài đặt, thì phương thức sẽ không trả kết quả.
Lỗi
Phương thức này có thể bị lỗi vì lỗi mạng. Bạn luôn nên bọc nó trong một pcall để xử lý lỗi.
Thả một lỗi trong các tình huống này:
- Gia đình đã qua là một chuỗi trống.
- Tải gia đình không thành công.
- ID tài sản không hợp lệ hoặc điều hướng tới một tài sản không tồn tại.
Tham Số
ID tài sản của gia tài để tìm kiếm.
Lợi Nhuận
Thông tin về gia tài chữ.
Mẫu mã
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 tương tự như TextService:GetTextSize() , nhưng sử dụng Font đối tượng thay vì Enum.Font, có quyền truy cập vào nhiều bản chữ hơn.
Được sử dụng để đo kích thước một số văn bản được cung cấp một set of properties like the chuỗi, size, và font.
Đây là một hàm trả kết quả vì một số bộ chữ cần phải được tải để đo lường chúng. Nếu bộ chữ đã được tải, thì nó sẽ không trả kết quả. ContentProvider:PreloadAsync() có thể được sử dụng để đảm bảo một bộ chữ được tải.
Lỗi
Phương thức này có thể bị lỗi vì lỗi mạng. Bạn luôn nên bọc nó trong một pcall để xử lý lỗi.
Thả một lỗi trong các tình huống này:
- The GetTextBoundsParams.Font has a blank family.
- The params argument was nil.
- Gia đình chữ hoặc khuôn mặt chữ không thể tải xuống.
Tham Số
Một tham chiếu đến một GetTextBoundsParams đối tượng.
Lợi Nhuận
Mẫu mã
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)