TextService
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
TextService, oyunun içindeki metni görüntülemeyi işleyen içsel bir hizmettir.
Bu sınıfın iki üye işlevi vardır:
Class.TextService:GetTextSize() fonksiyonu, belirli bir metin yazısı ile belirlenmiş biçimleme ile ilgili alanı hesaplama yeteneği verir, bir Datatype.Vector2 piksel boyutu geri verir.
Class.TextService:FilterStringAsync() işlevi, kullanıcının belirli metni (sohbet mesajları veya diğer girdiler gibi) güvenli olması açısından kullanıcının belirli metni filtrelemesini sağlar. Roblox'un varsayılanını kullanmayan geliştiriciler veya kullanıcılar, diğer girdileri girmesine izin vermezse, bu işlevi kullan
Özet
Özellikler
Yöntemler
Belirli biçimleme parametreleri ve boyut sınırlarını kullanırken yazı ile alınacak Vector2 boyutlarını hesaplar.
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
Eski chat'te desteklenmiyor. Bu yöntem artık desteklenmiyor ve kullanılmamalıdır.
- FilterStringAsync(stringToFilter : string,fromUserId : number,textContext : Enum.TextFilterContext):TextFilterResult
Bir kullanımdan alınan bir dizi filtreleyin ve bununla birlikte doğru şekilde filtrelenmiş metni dağıtmak için kullanılan bir TextFilterResult ı döndürür.
Bir font ailesinin ismini ve yüzlerini içeren bir tabloyu döndürür.
Verilen parametlerin genişliğini ve yüksekliğini hesaplar.
Özellikler
Yöntemler
GetTextSize
Belirli biçimleme parametreleri ve boyut sınırlarını kullanırken yazı ile alınacak Vector2 boyutlarını hesaplar.
Not, fontSize öğesi Enum.FontSize İstek Kabul Etmez. Yerine, Enum.FontSize İstek Boyutu ile eşleşen sayı boyutu kullanılmalıdır. Bu, değerin Enum.FontSize İstek ile eşleşen değerine eşittir. Ö
Bu işlev, TextLabel.TextBounds özelliğinin, TextLabel ve TextButton nesnelerinin kullanılabilir bir alternatifi olarak kullanışlıdır. Dimensionlar texti hesap etmek için 2>Class.TextLabel.TextSeconds2> özelliğini kull
GetTextSize ile, bir belirli TextLabel veya TextButton içindeki özellik strung'un gereken boyutları, herhangi bir nesne oluşturulmadan veya metin özelliği ayarlanmadan önce hesaplanabilir.
Geliştiriciler, sonuçta kesilmeyi önlemek için bir piksel kapalıeklemelidir.
Bu yöntem sadece Enum.Font içinde listelenen fontlara sınırlıdır. Daha fazla fonta erişmek için TextService:GetTextBoundsAsync() yerine kullanabilirsiniz.
Parametreler
Metin boyutunun hesaplanacağı sıra.
Kullanılan karakter boyutunu temsil eden sayı.
Kullanılan font.
Kullanılacak TextLabel.AbsoluteSize öğenin metni. Kullanıcının metni nasıl 包装할지 hesap etmek için gereklidir.
Dönüşler
Belirli biçimlendirme ile oluşturulan yazının gereken alanın büyüklüğü, piksel olarak.
Kod Örnekleri
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
Görüntülü sohbet desteklenmez. Bu yöntem artık desteklenmiyor ve kullanılmamalıdır. Tüm çağrılar boş bir nesne iade eder. Chat mesajlarının çevirimi sadece TextChatService aracılığıyla mevcut olabilir.
Parametreler
Dönüşler
FilterStringAsync
FilterStringAsync işlevi, bir kullanıcıdan alınan bir dizi kullanır ve TextService kullanır ve bununla birlikte doğru olarak filtrelenen metni dağıtmak için kullanılan bir TextFilterResult döndürür.
Kullanım
Bu yöntem, bir kullanıcı bir mesajı gönderdiğinde her seferinde bir kez çağrılmalıdır. Bu işlevin sonuçlarını kaydetmeyin ve ayrı mesajlar için tekrar kullanın. Eğer sonuçlar kaydedilirse ve bu yöntem tekrar kullanılırsa, kullanıcının gizliliğini tehli
Ancak, bu sonuç nesnelerini tutmak, kullanıcıların sunucuya daha sonra katıldığında aynı mesajı göstermek için güvenli ve verimli bir şekilde bir sunucu sohbet günlüğü oluşturmak için kullanılabilir. Örneğin: Bu, kullanıcıların sunucuya ilk kez yazıldığında ve ismi filtrelenmediğinde kullan
Opcional Enum.TextFilterContext parametresi sorgunun filtrelenmiş sonucuna etkisi yoktur. Bu değer Roblox'un metin filtrelemeyi geliştirmesi için kullanılacaktır.
Özel metin, her oyuncunun görebileceği herhangi bir şeydir, özellikle her oyuncunun görebileceği özel bir metindir. Örneğin, sohbet bir tek oyuncu tarafından görülürse, böylece sohbet özel olarak kabul edilir. grupiçin veya sunucu gibi genel olarak görülebilen bir chat, herkese açıkmetin olarak kabul edilir. Eğ
Not:
- Bu yöntem her zaman bir metin filtreleme hizmeti çağırmak için geri döndürür
- Bu yöntem, çözülmeyen bir hizmet hatası oluşursa atar. Bu işlev, bu yöntem bir hata atarsa lütfen taleptekrar denemeyin; bu yöntem kendi tekrar logik içerir. Bu yöntem başarısız başarısız başarısız başarısız başarısız başarısız başarısız başarısız başarısız başarısız başarısız başarısız başarısız ba
- Bu yöntem, fromUserId'in mevcut sunucuda çevrimiçi olmadığı durumda şu anda throw'ı çeker. Gelecekte, çevrimiçi olmayan veya farklı bir sunucuda olan kullanıcıları desteklemek için planlıyoruz.
Parametreler
Filtrelenen metin.
Metni filtreleyen oyuncunun kimliği.
Filtrelenmiş mesajın kullanılacağı konu.
Dönüşler
Kod Örnekleri
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
Bir font ailesinin ismini ve yüzlerini içeren bir tabloyu döndürür.
Döndürilen tablolar bu şekilde yapılandırılmıştır:
type FaceInfo = {Name: string, -- Örnekler: "Düzenli", "Kitap", "İtalik", "İnce İtalik"Weight: Enum.FontWeight,Style: Enum.FontStyle, -- Normal veya İtalik}type FamilyInfo = {Name: string, -- Örnekler: "Source Sans Pro", "Grenze Gotisch"Faces: {FaceInfo} -- Her zaman en az 1 tane var, ancak en fazla 18 tane olabilir.}
Font ailesi zaten önce GetFamilyInfoAsync , ContentProvider:PreloadAsync() veya TextLabel.FontFace özelliği ayarlabir metin nesnesi olarak yüklendiyse, yöntem işlemi işlemiyor ve verilmez.
Hatalar
Ağ hataları nedeniyle bu yöntem başarısız olabilir. Hata işleme için her zaman bir pcall ile çevrelemelisiniz.
Bu senaryolarda bir hata oluşur:
- Geçmiş aileniz boş bir dizi.
- Aile başarısız bir şekilde indirildi.
- Varlık kimliği geçersiz veya mevcut olmayan bir varlığa işaret ediyor.
Parametreler
Yukarı bakmak için font ailesinin ID'si.
Dönüşler
Font ailesi hakkındaki bilgi.
Kod Örnekleri
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
Bu yöntem TextService:GetTextSize() ile benzer, ancak Font nesnini kullanır, bu da daha fazla fonta erişim sağlar.
Yazıtip, dizive font gibi özelliklerin bir setini ölçmek için kullanılır.
Bu bir verimlilik işlevidir, çünkü bazı fontlar ölçülmek için yükleneceği gerekir. Eğer font zaten yüklendiyse, yüklenmez. ContentProvider:PreloadAsync() kullanılabilir, bir fontun yüklendiğinden emin olmak için kullanılabilir.
Hatalar
Ağ hataları nedeniyle bu yöntem başarısız olabilir. Hata işleme için her zaman bir pcall ile çevrelemelisiniz.
Bu senaryolarda bir hata oluşur:
- The GetTextBoundsParams.Font has a blank family.
- paramètres paramètres paramètres 1>paramètres1> 4>paramètres4> 7>paramètres7> 0>paramètres0> 3>paramètres3> 6>paramètres6> params9> 2>paramètres2> 5>paramètres5> params8> 1>paramètres1> 4>paramètres4> 7>paramètres7> 9>paramètres9> 1>paramètres1> 4>paramètres4> 7>paramètres7> 0>paramètres0> 3>paramètres3>
- Font ailesi veya font yüzü indirilemedi.
Parametreler
Bir GetTextBoundsParams nesneye bir referans.
Dönüşler
Kod Örnekleri
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)