TextService

Hiển Thị Bản Đã Lỗi Thời

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

Không Thể Tạo
Dịch Vụ
Không Sao Chép

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

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

string: string

Chuỗi mà kích thước văn bản sẽ được tính toán.

Giá Trị Mặc Định: ""
fontSize: number

Số nguyên đại diện cho kích thước phông được sử dụng.

Giá Trị Mặc Định: ""
font: Enum.Font

Phông chữ đã sử dụng.

Giá Trị Mặc Định: ""
frameSize: Vector2

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.

Giá Trị Mặc Định: ""

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.

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

Sinh Lợi

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ố

stringToFilter: string
Giá Trị Mặc Định: ""
fromUserId: number
Giá Trị Mặc Định: ""
targetLocales: Array
Giá Trị Mặc Định: ""
Giá Trị Mặc Định: "PrivateChat"

Lợi Nhuận

FilterStringAsync

Sinh Lợi

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ố

stringToFilter: string

Văn bản để lọc.

Giá Trị Mặc Định: ""
fromUserId: number

ID của người chơi lọc văn bản.

Giá Trị Mặc Định: ""

Những ngữ cảnh mà tin nhắn bị lọc sẽ được sử dụng trong.

Giá Trị Mặc Định: "PrivateChat"

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.

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

Sinh Lợi

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ố

assetId: ContentId

ID tài sản của gia đình phông chữ để tìm kiếm.

Giá Trị Mặc Định: ""

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.

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

Sinh Lợi

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 .

Giá Trị Mặc Định: ""

Lợi Nhuận

Kích thước của văn bản như một Vector2 .

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.

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

Sinh Lợi

Tham Số

fontSize: number
Giá Trị Mặc Định: ""
font: Enum.Font
Giá Trị Mặc Định: ""

Lợi Nhuận

Sự Kiện