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, oyundaki metin görüntülenmesini içeren bir hizmettir ve içeride sorumludur.
Bu sınıfın iki üye işlevi vardır:
The TextService:GetTextSize() fonksiyonu, belirtilen biçimle belirli bir metin için gerekli alanı hesaplama yeteneği verir geliştiricilere, bir Vector2 piksel boyutu döndürerek.
TextService:FilterStringAsync() fonksiyonu, kullanıcının belirtilen metnini (örneğin sohbet mesajları veya diğer girişler) kullanıcı güvenliği çıkarları için doğru bir şekilde filtrelemek için gereklidir.Roblox'un varsayılanını kullanmayan geliştiriciler veya kullanıcılara başka bir şekilde metin girmesine izin vermeyenler bu işlevi kullanmalıdır.
Özet
Özellikler
Yöntemler
Belirtilen biçimlendirme parametleri ve boyut sınırları kullanılarak metin ile alınacak Vector2 boyutlarını hesaplar (piksel olarak).
- FilterAndTranslateStringAsync(stringToFilter : string,fromUserId : number,targetLocales : Array,textContext : Enum.TextFilterContext):TextFilterTranslatedResult
Sohbet çevirisi miras sohbetinde desteklenmiyor. Bu yöntem artık desteklenmiyor ve kullanılmamalıdır.
- FilterStringAsync(stringToFilter : string,fromUserId : number,textContext : Enum.TextFilterContext):TextFilterResult
Bir kullanıcıdan alınan bir dizeyi filtreler ve uygun şekilde filtrelenmiş metni dağıtmak için kullanılabilecek bir TextFilterResult döndürür.
Bir yazı tipi ailesinin adı ve yüzlerini içeren bir tablo döndürür.
Verilen parametrelere göre metin genişliğini ve yüksekliğini hesaplar.
Özellikler
Yöntemler
GetTextSize
Belirtilen biçimlendirme parametleri ve boyut sınırları kullanılarak metin ile alınacak Vector2 boyutlarını hesaplar (piksel olarak).
Not, fontSize parametri Enum.FontSize Enum'i kabul etmeyecektir.Bunun yerine, Enum.FontSize Enum ile eşleşen tamsayı boyutu kullanılmalıdır.Bu, Enum.FontSize Enum'in değerine eşit değildir.Örneğin, Boyut11 için sayısal değer 11 kullanılmalıdır.
Bu işlev, TextLabel.TextBounds özelliğinin TextLabel ve TextButton nesnelerinin bir yararlı alternatifi olarak kullanılabilir.Boyutların metnini hesaplamak için TextLabel.TextBounds özelliğini kullanmak genellikle pratik değildir, çünkü oluşturulması gereken bir TextLabel nesne gerektirir.
GetTextSize ile, belirli bir metin içeriğinin belirli bir TextLabel veya TextButton içinde gerekli boyutları, herhangi bir nesne veya metin özelliği oluşturulmadan veya ayarlanmadan önce hesaplanabilir.
Geliştiricilerin, sonuca bir boşluk pikeli eklemek önerilir, böylece hiçbir metin kesilmez.
Bu yöntem sadece Enum.Font 'de listelenen fontlara sınırlıdır. Daha fazla fonta erişmek için yerine TextService:GetTextBoundsAsync() kullanabilirsiniz.
Parametreler
Metin boyutunun hesaplanacağı dize.
Kullanılan yazı boyutunu temsil eden tamsayı.
Kullanılan yazı tipi.
Kullanılacak metin nesnesinin TextLabel.AbsoluteSize 'si. Metnin nasıl sarılacağını hesaplamak için gereklidir.
Dönüşler
Belirtilen biçimlendirme ile birlikte gerekli olan alanın boyutu, piksel olarak.
Kod Örnekleri
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.
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
Sohbet çevirisi miras sohbetinde desteklenmiyor.Bu yöntem artık desteklenmiyor ve kullanılmamalıdır.Tüm çağrılar boş bir nesne döndürür.Sohbet mesajlarını çevirmek yalnızca TextChatService üzerinden mevcuttur.
Parametreler
Dönüşler
FilterStringAsync
FilterStringAsync işlevi, bir kullanıcıdan alınan bir dizeyi TextService kullanarak filtreler ve doğru filtrelenmiş metni dağıtmak için kullanılabilecek 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ı önbelleğe almayın ve ayrı mesajlar için yeniden kullanmayın.Bir kullanıcı aynı metni defalarca gönderirse, bu yöntem her mesaj gönderildiğinde tekrar çağrılmalıdır.Sonuçlar önbelleğe alınır ve yeniden kullanılırsa, spam tespiti ve çok sayıda bağımsız filtreleme türü bozulur ve kullanıcı güvenliğini riske atar.Doğru bir şekilde kullanılmayan önbelleştirilmiş sonuçları kullanan oyunlar moderasyonla karşı karşıya kalabilir.
Ancak, bu sonuç nesnelerini daha sonra sunucuya katılan kullanıcılara aynı mesajı göstermek için saklamaya teşvik edilir.Örneğin: bu, daha sonra katılan kullanıcılar için daima en sınırlayıcı filtreyi kullanan bir sunucu sohbet günlüğünü güvenli ve verimli bir şekilde uygulamak veya daha sonra evcil hayvan adı gibi bir metni bir oyuna katılan bir kullanıcıya verimli bir şekilde göstermek için kullanılabilir, önce evcil hayvan adı filtre edildi ve isim filtre edildi.
Opsiyonel Enum.TextFilterContext parametresi, sorgunun filtrelenmiş sonucunu etkilemeyecektir. Bu değer, Roblox'un metin filtrelemeyi geliştirmek için kullanılacaktır.
Özel metin, her oyuncuya değil, sadece belirli oyuncular tarafından görülen her şeydir.Örneğin, sohbet bir tek oyuncu tarafından veya seçilmiş bir grup oyuncu tarafından görüldüyse, sohbet özel olarak kabul edilir.Takımlar için sohbet veya potansiyel olarak sunucu gibi daha geniş bir gruba görünebilen sohbet, genel olarak kabul edilir.Metninizin neye uygun olduğundan emin değilseniz, zorunlu alanı boş bırakın.
Not:
- Bu yöntem daima bir metin filtreleme hizmeti çağrısı yapmak için sonuç verir
- Bu yöntem çözülemeyen bir hizmet hatası varsa atabilir.Bu işlev bir hata atarsa, taleptekrar denemeyin; bu yöntem kendi yeniden dene mantığını içsel olarak uygular.Bu yöntem başarısız olursa, metni herhangi bir kullanıcıya göstermeyin.
- Bu yöntem şu anda atar kullanıcı kimliği mevcut sunucuda çevrimiçi değilse.Gelecekte çevrimdışı veya farklı bir sunucuda olan kullanıcıları desteklemek planlıyoruz.
Parametreler
Filtrelenmesi gereken metin.
Metni filtreleyen oyuncunun kimliği.
Filtrelenen mesajın kullanılacağı konteks.
Dönüşler
Kod Örnekleri
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.
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 yazı tipi ailesinin adı ve yüzlerini içeren bir tablo döndürür.
Döndürülen tablo böyle 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 ya da}type FamilyInfo = {Name: string, -- Örnekler: "Kaynak Sans Pro", "Grenze Gotisch"Faces: {FaceInfo} -- Her zaman en az 1 tane var, ancak 18'e kadar olabilir.}
Yazı tipi ailesi daha önce GetFamilyInfoAsync , ContentProvider:PreloadAsync() veya TextLabel.FontFace özellikli bir metin nesnesi tarafından zaten yüklendiyse, yöntem reddedilmeden döner.
Hata durumu
Bu yöntem, ağ hataları nedeniyle başarısız olabilir. Hata durumunda daima bir pcall ile sarılmalıdır.
Bu senaryolarda bir hata atar:
- Geçen aile boş bir dizi.
- Aile indirilmedi.
- Varlık kimliği geçersiz veya mevcut olmayan bir varlığa işaret ediyor.
Parametreler
Araştırılacak font ailesinin varlık kimliği.
Dönüşler
Yazı tipi ailesiyle ilgili bilgiler.
Kod Örnekleri
This example showcases a possible usage of the TextService:GetFamilyInfoAsync() method.
It prints out information about a font family to the output window.
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 ile benzer, ancak daha fazla yazı tipine erişimi olan nesnesini kullanır, bu da daha fazla yazı tipine erişim sağlar.
Bazı metinlerin ne kadar büyük olacağını ölçmek için, dize, boyut ve font gibi bir dizi özellik verilir.
Bu bir üretim işlevidir, çünkü bazı yazı tiplerinin ölçülmesi için yüklenmesi gerekebilir.Font zaten yüklendiyse, vermeyecektir.ContentProvider:PreloadAsync() bir yazı tipi yüklendiğinden emin olmak için kullanılabilir.
Hata durumu
Bu yöntem, ağ hataları nedeniyle başarısız olabilir. Hata durumunda daima bir pcall ile sarılmalıdır.
Bu senaryolarda bir hata atar:
- The GetTextBoundsParams.Font boş bir aileye sahiptir.
- The params argümanı nil idi.
- Yazı tipi ailesi veya yazı tipi yüklenemedi.
Parametreler
Bir GetTextBoundsParams nesneye referans.
Dönüşler
Kod Örnekleri
This example shows how you can use TextService:GetTextBoundsAsync().
It measures the size of some text in a specific font, then prints the result.
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)