TextService

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Layanan
Tidak Direplikasi

TextService adalah layanan yang bertanggung jawab secara internal untuk menangani tampilan teks di game.

Kelas ini memiliki dua fungsi anggota:

Fungsi TextService:GetTextSize() memberi pengembang kemampuan untuk menghitung ruang yang dibutuhkan untuk teks khusus dengan pengaturan formasi tertentu, menghasilkan ukuran Vector2 pixel.

Fungsi TextService:FilterStringAsync() adalah diperlukan untuk benar-benar menyaring teks yang ditentukan pengguna (seperti pesan chat atau masukan lainnya) dalam kepentingan keselamatan pengguna. Pengembang yang tidak menggunakan default Roblox Chat , atau memungkinkan pengguna untuk masukkan teks lainnya harus menggunakan fungsi ini.

Rangkuman

Metode

Properti

Metode

GetTextSize

Menghitung dimensi Vector2 (dalam pixel) yang akan diambil dengan teks saat menggunakan parameter penyempurnaan dan kendali ukuran yang ditentukan.

Catat, parameter fontSize tidak akan menerima Enum.FontSize Enum. Sebaliknya, ukuran intian yang sesuai dengan Enum.FontSize Enum harus digunakan. Ini tidak sama dengan nilai Enum.FontSize Nemukan. Misalnya, untuk 1> Size111>

Fungsi ini adalah alternatif yang berguna untuk TextLabel.TextBounds property of the TextLabel dan TextButton objects. Menggunakan property 1> Class.TextLabel.TextSeconds1> untuk menghitung dimensi teks yang dibutuhkan sering tidak praktis karena

Dengan GetTextSize, dimensi yang diperlukan oleh kuerda teks khusus dalam kuerda TextLabel atau TextButton dapat dihitung sebelum objek dibuat atau aturlokasi teks.

Direkomendasikan agar pengembang menambahkan pixel pada hasil untuk memastikan tidak ada teks yang mati.

Metode ini terbatas hanya pada huruf yang terdaftar dalam Enum.Font . Untuk mendapatkan akses ke lebih banyak huruf, Anda dapat menggunakan TextService:GetTextBoundsAsync() sebagai gantinya.

Parameter

string: string

String untuk ukuran teks harus dihitung.

fontSize: number

Angka yang mewakili ukuran huruf yang digunakan.

font: Enum.Font

Dua font yang digunakan.

frameSize: Vector2

The TextLabel.AbsoluteSize of the text object to be used. Diperlukan untuk menghitung bagaimana teks akan dikemas.


Memberikan nilai

Ukuran ruang yang dibutuhkan, dalam pixel, oleh string dengan format yang ditentukan.

Contoh Kode

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

Hasil

Terjemahan chat tidak didukung dalam chat legendaris. Metode ini tidak lag lagi dan seharusnya tidak digunakan. Semua panggilan kembali objek kosong. Menerjemahkan pesan chat hanya tersedia melalui TextChatService .

Parameter

stringToFilter: string
fromUserId: number
targetLocales: Array
Nilai Default: "PrivateChat"

Memberikan nilai

FilterStringAsync

Hasil

Fungsi FilterStringAsync menyaring string yang diterima dari pengguna, menggunakan TextService , dan menghasilkan TextFilterResult yang dapat digunakan untuk mendistribusikan teks yang benar-benar disaring dengan cara yang benar.

Penggunaan

Metode ini harus dianggap setiap kali seorang pengguna mengirim pesan. Jangan menyimpan hasil fungsi ini dan gunakan kembali mereka untuk pesan terpisah. Jika pengguna mengirimkan teks yang sama beberapa kali metode ini harus dianggap lagi setiap kali pesan dikirim. Jika hasil dicache dan dianggap menggunakan spam deteksi dan banyak

Namun, disarankan untuk menyimpan objek hasil ini untuk menampilkan pesan yang sama kepada pengguna yang bergabung dengan server nanti. Misalnya: ini dapat digunakan untuk dengan aman dan efisien menerapkan server chat log yang selalu menggunakan filter yang paling membatasi untuk pengguna yang bergabung nanti, atau untuk menampilkan teks seperti nama hewan peliharaan kepada pengguna yang

Parameter Enum.TextFilterContext yang opsional tidak akan mengubah hasil filtering pada pencarian.Nilai ini akan digunakan untuk meningkatkan filter teks Roblox.

Teks pribadi adalah apa pun yang hanya dilihat oleh pemain tertentu, bukan setiap pemain. Misalnya, jika chat dilihat oleh pemain tunggal, atau oleh kumpulan pemain yang dipilih, maka chat dianggap privat. Chat untuk tim atau chat yang potensialnya dapat dilihat oleh gruppemain lebih luas, seperti server, dianggap publik. Jika Anda tidak yak

Catatan:

  • Metode ini selalu menghasilkan untuk membuat panggilan layanan filter teks
  • Metode ini dapat throw jika ada error layanan yang tidak dapat diatasi. Jika fungsi ini throw error silakan jangan mencoba permintaan; metode ini menerapkan logika retry sendiri secara internal. Jika metode ini gagal maka tidak menampilkan teks kepada pengguna.
  • Metode ini saat ini menjatuhkan jika FROM UserId tidak online di server saat ini. Kami berencana untuk mendukung pengguna yang sedang offline atau di server yang berbeda di masa depan.

Parameter

stringToFilter: string

Teks untuk disaring.

fromUserId: number

ID pengguna dari pemutar yang mengurutkan teks.

Konteks yang pesan disaring akan digunakan.

Nilai Default: "PrivateChat"

Memberikan nilai

Contoh Kode

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

Hasil

Mengembalikan tabel yang berisi nama dan wajah font family.

Tabel yang dikembalikan diatur seperti ini:


type FaceInfo = {
Name: string, -- Contoh: "Regular", "Book", "Italic", "Thin Italic"
Weight: Enum.FontWeight,
Style: Enum.FontStyle, -- Italic atau Normal
}
type FamilyInfo = {
Name: string, -- Contoh: "Source Sans Pro", "Grenze Gotisch"
Faces: {FaceInfo} -- Selalu ada setidaknya 1 tapi bisa ada hingga 18.
}

Jika keluarga huruf telah dimuat oleh panggilan sebelumnya ke GetFamilyInfoAsync , ContentProvider:PreloadAsync() , atau objek teks dengan aturpropinsi TextLabel.FontFace , maka metode ini kembali tanpa memberikan hasil.

Kesalahan

Metode ini dapat gagal karena kesalahan jaringan. Anda harus selalu mengikatnya dalam pcall untuk menangani kesalahan.

Mengemudi kesalahan dalam skenario ini:

  • Keluarga yang dilewati adalah string kosong.
  • Mengunduh keluarga gagal.
  • ID aset tidak valid atau menunjuk ke aset yang tidak ada.

Parameter

assetId: ContentId

ID aset keluarga huruf untuk dicari.


Memberikan nilai

Informasi tentang keluarga huruf.

Contoh Kode

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

Hasil

Metode ini mirip dengan TextService:GetTextSize() , tetapi menggunakan objek Font alih-alih Enum.Font, yang memiliki akses ke lebih banyak huruf.

Digunakan untuk mengukur seberapa besar beberapa teks akan diberikan beberapa sifat seperti string, ukuran, dan huruf.

Ini adalah fungsi hasil karena beberapa huruf mungkin perlu dimuat untuk diukur. Jika huruf sudah dimuat, maka tidak akan menghasilkan. ContentProvider:PreloadAsync() dapat digunakan untuk memastikan huruf dimuat.

Kesalahan

Metode ini dapat gagal karena kesalahan jaringan. Anda harus selalu mengikatnya dalam pcall untuk menangani kesalahan.

Mengemudi kesalahan dalam skenario ini:

  • The GetTextBoundsParams.Font memiliki keluarga kosong.
  • Argumen params adalah nol.
  • Keluarga huruf atau wajah huruf gagal download.

Parameter

Sebuah referensi ke objek GetTextBoundsParams .


Memberikan nilai

Ukuran teks sebagai Vector2 .

Contoh Kode

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

Hasil

Parameter

fontSize: number
font: Enum.Font

Memberikan nilai

Acara