This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Yazı tipleri (font), etiket bileşenlerinde (Label component) ve GUI metin düğümlerinde (GUI text node) metnin görüntüsünü oluşturmak için işleme (rendering) sırasında kullanılır. Defold çeşitli yazı tipi dosya biçimlerini destekler:
Defold 1.13.2’den itibaren hem eski hem de tam metin yerleşimi motorları, .ttf ve .otf kaynaklarından çalışma sırasında üretim de dahil olmak üzere TrueType dış hatlarını ve OpenType CFF1/CFF2 dış hatlarını destekler.
Metnin ayrı bölümlerini biçimlendirme, bağlantılar ve satır içi sprite bileşenleriyle çalışma hakkında bilgi için Zengin metin işaretleme kılavuzuna bakın.
Projenize eklenen yazı tipleri, Defold’un işleyebileceği bir doku (texture) biçimine otomatik olarak dönüştürülür. Her birinin kendine özgü avantajları ve dezavantajları olan iki yazı tipi işleme tekniği bulunur:
Varsayılan olarak, rasterleştirilmiş glif (glyph) görüntülerine dönüştürme işlemi proje derlenirken (çevrimdışı) gerçekleşir. Bunun dezavantajı, her yazı tipinin olası tüm gliflerinin derleme aşamasında rasterleştirilmesi gerekmesidir. Bu işlem, bellek tüketen ve dağıtım paketinin boyutunu da artıran çok büyük dokular üretebilir.
“Çalışma zamanı yazı tipleri” (runtime fonts) kullanıldığında, .ttf ve .otf yazı tipleri olduğu gibi paketlenir ve rasterleştirme çalışma sırasında ihtiyaç duyuldukça gerçekleşir. Bu, hem çalışma zamanındaki bellek kullanımını hem de dağıtım paketinin boyutunu en aza indirir.
Çalışma zamanı yazı tipleri, sağdan sola gibi tam metin yerleşimlerini destekleme avantajına da sahiptir. Şu anda HarfBuzz, SheenBidi, libunibreak ve SkriBidi kütüphanelerini kullanıyoruz.
Çalışma zamanı yazı tiplerini etkinleştirme bölümüne bakın.
Düzenleyici, yazı tipi ve sahne metni önizlemeleri için motorun yazı tipi işleyicisini kullanır. Metin şekillendirme ve sağdan sola yerleşim, çalışma zamanı yazı tiplerini ve App Manifest içindeki Use full text layout system seçeneğini gerektirir. Çevrimdışı yazı tiplerinde önizleme, yazı tipinin Characters ve All Chars ayarlarını dikkate alır.
.fontc dosya biçimi, yazı tipi koleksiyonu (font collection) olarak da bilinir. Çevrimdışı modda bu koleksiyonla yalnızca bir yazı tipi ilişkilendirilir.
Çalışma zamanı yazı tiplerini kullanırken yazı tipi koleksiyonuyla birden fazla yazı tipi dosyasını (.ttf veya .otf) ilişkilendirebilirsiniz.
Bu, bellek kullanımını düşük tutarken farklı dillerdeki birden fazla metni işlemek için bir yazı tipi koleksiyonu kullanmanızı sağlar. Örneğin, Japonca yazı tipini içeren bir koleksiyon yükleyebilir, ardından bu yazı tipini geçerli ana yazı tipiyle ilişkilendirebilir ve sonrasında Japonca yazı tipi koleksiyonunu bellekten kaldırabilirsiniz.
Defold’da kullanmak üzere bir yazı tipi oluşturmak için menüden File ▸ New... seçeneğini, ardından Font seçeneğini seçerek yeni bir yazı tipi dosyası oluşturun. Ayrıca Assets tarayıcısında bir konuma sağ tıklayıp New... ▸ Font seçeneğini seçebilirsiniz.

Yeni yazı tipi dosyasına bir ad verin ve Ok düğmesine tıklayın. Yeni yazı tipi dosyası düzenleyicide açılır.

Kullanmak istediğiniz yazı tipini Assets tarayıcısına sürükleyin ve uygun bir konuma bırakın.
Font özelliğini yazı tipi dosyasına ayarlayın ve yazı tipi özelliklerini gerektiği gibi düzenleyin.
.fnt dosyası.TYPE_BITMAP, içe aktarılan OTF veya TTF dosyasını, metin düğümlerini işlemek için bit eşlem verilerinin kullanıldığı bir yazı tipi sayfası dokusuna dönüştürür. Renk kanalları; glifin ana şeklini, dış çizgisini ve düşen gölgesini kodlamak için kullanılır. .fnt dosyalarında kaynak dokunun bit eşlemi olduğu gibi kullanılır.TYPE_DISTANCE_FIELD İçe aktarılan yazı tipi, piksel verilerinin ekran pikselleri yerine yazı tipinin kenarına olan uzaklıkları temsil ettiği bir yazı tipi sayfası dokusuna dönüştürülür. Ayrıntılar için aşağıya bakın.MODE_SINGLE_LAYER, her karakter için tek bir dörtgen üretir.MODE_MULTI_LAYER, sırasıyla glifin şekli, dış çizgisi ve gölgeleri için ayrı dörtgenler üretir. Katmanlar arkadan öne doğru işlenir. Böylece dış çizgi, glifler arasındaki mesafeden daha geniş olduğunda bir karakterin önceden işlenmiş karakterleri kapatması önlenir. Bu işleme modu, yazı tipi kaynağındaki Shadow X/Y özelliklerinde belirtildiği gibi düşen gölgenin doğru şekilde kaydırılmasını da sağlar.Gölge desteği, yerleşik yazı tipi materyali gölgelendiricileri (shader) tarafından sağlanır ve hem tek hem de çok katmanlı işleme modunu destekler. Katmanlı yazı tipi işlemeye veya gölge desteğine ihtiyacınız yoksa builtins/font-singlelayer.fp gibi daha basit bir gölgelendirici kullanmanız önerilir.
MODE_MULTI_LAYER olarak ayarlandığında etkiler.Çalışma zamanı yazı tiplerinde bu metin, önbelleği uygun gliflerle önceden hazırlamak için kullanılır. Bu işlem yükleme sırasında gerçekleşir. font.prewarm_text() işlevine bakın.
Yazdırılabilir ASCII karakterleri şunlardır: space ! “ # $ % & ‘ ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
ERROR:RENDER: Out of available cache cells! Consider increasing cache_width or cache_height for the font.).
0 olarak ayarlanırsa önbellek boyutu otomatik olarak belirlenir ve en fazla 2048x4096 boyutuna kadar büyür.
Uzaklık alanı yazı tipleri, dokuda bit eşlem verileri yerine glifin kenarına olan uzaklığı saklar. Motor yazı tipini işlerken uzaklık verilerini yorumlamak ve bunları kullanarak glifi çizmek için özel bir gölgelendirici gerekir. Uzaklık alanı yazı tipleri, bit eşlem yazı tiplerinden daha fazla kaynak tüketir ancak boyutlandırmada daha fazla esneklik sağlar.

Yazı tipini oluştururken Material özelliğini builtins/fonts/font-df.material (veya uzaklık alanı verilerini işleyebilen başka bir materyal) olarak değiştirdiğinizden emin olun; aksi takdirde yazı tipi ekranda işlenirken doğru gölgelendirici kullanılmaz.
Defold, üretilen bit eşlemlere ek olarak önceden hazırlanmış bit eşlem “BMFont” biçimindeki yazı tiplerini de destekler. Bu yazı tipleri, tüm glifleri içeren bir PNG yazı tipi sayfasından oluşur. Ayrıca bir .fnt dosyası, her glifin sayfanın neresinde bulunduğunu, boyutunu ve karakter çifti aralığı (kerning) bilgilerini içerir. (Defold’un, Phaser ve bazı diğer araçların kullandığı .fnt biçiminin XML sürümünü desteklemediğini unutmayın.)
Bu tür yazı tipleri, TrueType veya OpenType yazı tipi dosyalarından üretilen bit eşlem yazı tiplerine göre performans artışı sağlamaz; ancak doğrudan görüntü içinde istediğiniz grafikleri, renklendirmeleri ve gölgeleri barındırabilir.
Üretilen .fnt ve .png dosyalarını Defold projenize ekleyin. Bu dosyalar aynı klasörde bulunmalıdır. Yeni bir yazı tipi dosyası oluşturun ve font özelliğini .fnt dosyasına ayarlayın. output_format değerinin TYPE_BITMAP olarak ayarlandığından emin olun. Defold bir bit eşlem üretmez; PNG’de sağlanan bit eşlemi kullanır.
BMFont oluşturmak için uygun dosyaları üretebilen bir araç kullanmanız gerekir. Çeşitli seçenekler bulunur:

Yazı tipinin doğru işlenmesi için yazı tipini oluştururken materyal özelliğini builtins/fonts/font-fnt.material olarak ayarlamayı unutmayın.
Genel olarak bit eşlem yazı tipleri, yazı tipi ölçeklenmeden işlendiğinde en iyi sonucu verir. Ekrana işlenmeleri, uzaklık alanı yazı tiplerine göre daha hızlıdır.
Uzaklık alanı yazı tipleri büyütüldüğünde çok iyi sonuç verir. Bit eşlem yazı tipleri ise yalnızca piksellerden oluşan görüntüler olduğundan yazı tipi ölçeklenip büyütüldükçe pikseller de büyür ve bloklu görüntü kusurları oluşur. Aşağıdaki örnekte, 48 piksel boyutundaki bir yazı tipi 4 kat büyütülmüştür.

Küçültme sırasında GPU, bit eşlem dokularını iyi bir sonuç verecek şekilde ve verimli olarak küçültebilir ve kenarlarını yumuşatabilir. Bit eşlem yazı tipi, rengini uzaklık alanı yazı tipinden daha iyi korur. Aşağıda, aynı örnek yazı tipinin 48 piksel boyutundan 1/5’ine küçültülmüş halinin yakınlaştırılmış görünümü bulunur:

Uzaklık alanı yazı tiplerinin, gliflerin eğrilerini ifade edebilecek uzaklık bilgilerini barındıracak kadar büyük bir hedef boyutta işlenmesi gerekir. Aşağıdaki, yukarıdakiyle aynı yazı tipidir; ancak 18 piksel boyutundadır ve 10 kat büyütülmüştür. Bu boyutun, bu yazı tipinin şekillerini kodlamak için çok küçük olduğu açıktır:

Gölge veya dış çizgi desteği istemiyorsanız bunlara ait alfa değerlerini sıfıra ayarlayın. Aksi takdirde gölge ve dış çizgi verileri yine üretilir ve gereksiz yere bellek tüketir.
Defold’daki bir yazı tipi kaynağı, çalışma sırasında iki şey oluşturur: bir doku ve yazı tipi verileri.
Çalışma sırasında metin işlenirken motor, hangi gliflerin doku önbelleğinde bulunduğunu kontrol etmek için önce işlenecek glifler üzerinde dolaşır. Glif doku önbelleğinde bulunmayan her glif, yazı tipi verilerinde saklanan bit eşlem verilerinden dokuya aktarım yapılmasını tetikler.
Her glif, önbelleğe yazı tipinin taban çizgisine göre yerleştirilir. Bu, bir gölgelendiricide glifin karşılık gelen önbellek hücresi içindeki yerel doku koordinatlarının hesaplanmasını sağlar. Böylece renk geçişleri veya doku kaplamaları gibi belirli metin efektlerini dinamik olarak elde edebilirsiniz. Motor, önbellekle ilgili ölçüleri gölgelendiriciye texture_size_recip adlı özel bir gölgelendirici sabiti aracılığıyla sunar. Bu sabitin vektör bileşenleri aşağıdaki bilgileri içerir:
texture_size_recip.x, önbellek genişliğinin çarpmaya göre tersidirtexture_size_recip.y, önbellek yüksekliğinin çarpmaya göre tersidirtexture_size_recip.z, önbellek hücresi genişliğinin önbellek genişliğine oranıdırtexture_size_recip.w, önbellek hücresi yüksekliğinin önbellek yüksekliğine oranıdırÖrneğin, bir gölgelendirici parçasında renk geçişi oluşturmak için şunu yazmanız yeterlidir:
float horizontal_gradient = fract(var_texcoord0.y / texture_size_recip.w);
Gölgelendirici uniform parametreleri hakkında daha fazla bilgi için Gölgelendirici kılavuzuna bakın.
TrueType (.ttf) veya OpenType (.otf) yazı tipleri kullanıldığında, SDF türündeki yazı tipleri için çalışma sırasında üretim kullanılabilir. .otf kaynaklarından çalışma sırasında üretim, Defold 1.13.2’den itibaren desteklenir.
Bu yaklaşım, bir Defold oyununun indirme boyutunu ve çalışma zamanındaki bellek tüketimini önemli ölçüde azaltabilir.
Küçük dezavantajı, her glifin üretiminin eşzamansız olmasıdır.
Özelliği etkinleştirmek için game.project dosyasında font.runtime_generation ayarını yapın.
Bir App Manifest ekleyin ve Use full text layout system seçeneğini etkinleştirin.
Bu işlem, söz konusu özelliğin etkin olduğu özel bir motor derler.
Bu özellik şu anda deneyseldir, ancak gelecekte varsayılan iş akışı olarak kullanılması amaçlanmaktadır.
font.runtime_generation ayarı, projedeki tüm .ttf ve .otf yazı tiplerini etkiler.
Çalışma zamanı yazı tiplerinin kullanımını kolaylaştırmak için glif önbelleğinin önceden hazırlanması desteklenir. Bu, yazı tipinin Characters alanında listelenen gliflerin üretileceği anlamına gelir.
All Chars seçiliyse önceden hazırlama yapılmaz; çünkü bu, tüm glifleri aynı anda üretmek zorunda kalmama amacına aykırıdır.
Characters alanı .fontc dosyasında ayarlanmışsa glif önbelleğinde hangi gliflerin güncellenmesi gerektiğini belirlemek için bu alan metin olarak kullanılır.
font.prewarm_text(font_collection, text, callback) çağrısıyla glif önbelleğini elle güncellemek de mümkündür. Bu işlev, eksik gliflerin tümü glif önbelleğine eklendiğinde ve metni ekranda güvenle gösterebileceğinizde size haber vermek için bir geri çağırım (callback) sağlar.
Çalışma zamanı yazı tiplerinde, bir yazı tipi koleksiyonuna yazı tipi (.ttf) eklemek veya koleksiyondan kaldırmak mümkündür.
Bu, büyük bir yazı tipi farklı karakter kümeleri (ör. CJK) için birden fazla dosyaya bölündüğünde kullanışlıdır.
Bir yazı tipi koleksiyonuna yazı tipi eklemek, tüm glifleri otomatik olarak yüklemez veya işlemez.
function init(self)
-- Get the target font collection.
self.font_collection = go.get("#label", "font")
-- Get the first font assigned to the selected language collection.
local language_collection = go.get("localization_japanese#label", "font")
local font_info = font.get_info(language_collection)
self.language_ttf_hash = font_info.fonts[1].path_hash
-- Associate it with the target collection and increase its reference count.
font.add_font(self.font_collection, self.language_ttf_hash)
end
function final(self)
-- Remove the association and release the font reference.
font.remove_font(self.font_collection, self.language_ttf_hash)
end
Çalışma zamanı yazı tipiyle bir metni düzgün gösterebilmek için gliflerin çözümlenmesi gerekir. font.prewarm_text() işlevi bunu sizin için yapar.
Bu işlem eşzamansızdır. İşlem tamamlanıp geri çağırım alındığında, söz konusu glifleri içeren herhangi bir iletiyi güvenle gösterebilirsiniz.
Glif önbelleği dolarsa önbellekteki en eski glif çıkarılır.
font.prewarm_text(self.font_collection, info.text, function (self, request_id, result, err)
if result then
print("PREWARMING OK!")
go.set(self.label, "text", info.text)
else
print("Error prewarming text:", err)
end
end)