TextService
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
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
Menghitung dimensi Vector2 (dalam pixel) yang akan diambil dengan teks saat menggunakan parameter penyempurnaan dan kendali ukuran yang ditentukan.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
Terjemahan chat tidak didukung dalam chat legendaris. Metode ini tidak lag lagi dan seharusnya tidak digunakan.
- FilterStringAsync(stringToFilter : string,fromUserId : number,textContext : Enum.TextFilterContext):TextFilterResult
Menyaring string yang diterima dari pengguna, dan menghasilkan TextFilterResult yang dapat digunakan untuk mendistribusikan teks yang benar-benar disaring sesuai.
Mengembalikan tabel yang berisi nama dan wajah font family.
Menghitung lebar dan tinggi teks yang diberikan parameter.
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 untuk ukuran teks harus dihitung.
Angka yang mewakili ukuran huruf yang digunakan.
Dua font yang digunakan.
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
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
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
Memberikan nilai
FilterStringAsync
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
Teks untuk disaring.
ID pengguna dari pemutar yang mengurutkan teks.
Konteks yang pesan disaring akan digunakan.
Memberikan nilai
Contoh Kode
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
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
ID aset keluarga huruf untuk dicari.
Memberikan nilai
Informasi tentang keluarga huruf.
Contoh Kode
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
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
Contoh Kode
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)