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
Defold, kullanıcı arayüzlerini oluşturmak ve uygulamak için özel olarak tasarlanmış bir GUI düzenleyicisi ve güçlü betik olanakları sunar.
Defold’da grafik kullanıcı arayüzü (GUI), oluşturup bir oyun nesnesine (game object) eklediğiniz ve bir koleksiyona (collection) yerleştirdiğiniz bir bileşendir (component). Bu bileşenin özellikleri şunlardır:
GUI bileşenleri oyun görünümünden bağımsız olarak işlenir. Bu nedenle koleksiyon düzenleyicisinde belirli bir konuma yerleştirilmez ve görsel bir gösterimleri de bulunmaz. Ancak GUI bileşenlerinin, koleksiyon içinde bir konumu olan bir oyun nesnesinde bulunması gerekir. Bu konumu değiştirmenin GUI üzerinde bir etkisi yoktur.
GUI bileşenleri bir GUI sahnesi prototip dosyasından oluşturulur (diğer motorlarda “prefabs” veya “blueprints” olarak da bilinir). Yeni bir GUI bileşeni oluşturmak için Assets tarayıcısında bir konuma sağ tıklayın ve New ▸ Gui seçeneğini seçin. Yeni GUI dosyası için bir ad yazın ve Ok düğmesine basın.

Defold şimdi dosyayı otomatik olarak GUI sahne düzenleyicisinde açar.

Outline görünümü GUI’nin tüm içeriğini listeler: düğüm (node) listesini ve tüm bağımlılıklarını (aşağıya bakın).
Ortadaki düzenleme alanı GUI’yi gösterir. Düzenleme alanının sağ üst köşesindeki araç çubuğunda Move, Rotate ve Scale araçlarının yanı sıra bir yerleşim seçicisi bulunur.

Beyaz bir dikdörtgen, proje ayarlarında belirlenen varsayılan ekran genişliği ve yüksekliğinde, o anda seçili yerleşimin sınırlarını gösterir.
Outline görünümünde “Gui” kök düğümünü seçtiğinizde GUI bileşeninin özellikleri Properties panelinde gösterilir:
Per Node, her düğümü üst düğümün uyarlanmış boyutuna veya yeniden boyutlandırılmış ekrana göre uyarlar.Disable, düğüm uyarlama modunu kapatır. Bu, tüm düğümlerin ayarlanmış boyutlarını korumasını zorunlu kılar.128‘dir. Buna gui.new_texture() ile oluşturulan dokular ve go.set(..., "textures", ...) veya gui.set(msg.url(), "textures", ...) ile GUI’ye atanan harici dokular dahildir. Çok sayıda harici dokuyu değiştiren projelerde bu sınırın artırılması gerekebilir.GUI özelliklerini çalışma sırasında bir betik bileşeninden go.get() ve go.set() kullanarak değiştirebilirsiniz:

go.property("mybigfont", resource.font("/assets/mybig.font"))
function init(self)
-- get the font file currently assigned to the font with id 'default'
print(go.get("#gui", "fonts", { key = "default" })) -- /builtins/fonts/default.font
-- set the font with id 'default' to the font file assigned to the resource property 'mybigfont'
go.set("#gui", "fonts", self.mybigfont, { key = "default" })
-- get the new font file assigned to the font with id 'default'
print(go.get("#gui", "fonts", { key = "default" })) -- /assets/mybig.font
end

go.property("myeffect", resource.material("/assets/myeffect.material"))
function init(self)
-- get the material file currently assigned to the material with id 'effect'
print(go.get("#gui", "materials", { key = "effect" })) -- /effect.material
-- set the material id 'effect' to the material file assigned to the resource property 'myeffect'
go.set("#gui", "materials", self.myeffect, { key = "effect" })
-- get the new material file assigned to the material with id 'effect'
print(go.get("#gui", "materials", { key = "effect" })) -- /assets/myeffect.material
end

go.property("mytheme", resource.atlas("/assets/mytheme.atlas"))
function init(self)
-- get the texture file currently assigned to the texture with id 'theme'
print(go.get("#gui", "textures", { key = "theme" })) -- /theme.atlas
-- set the texture with id 'theme' to the texture file assigned to the resource property 'mytheme'
go.set("#gui", "textures", self.mytheme, { key = "theme" })
-- get the new texture file assigned to the texture with id 'theme'
print(go.get("#gui", "textures", { key = "theme" })) -- /assets/mytheme.atlas
end
Defold oyunlarında kaynak ağacı sabittir; bu nedenle GUI düğümleri için gereken tüm bağımlılıkların bileşene eklenmesi gerekir. Outline görünümü tüm bağımlılıkları türlerine göre “klasörler” altında gruplar:

Yeni bir bağımlılık eklemek için bağımlılığı Asset bölmesinden düzenleyici görünümüne sürükleyip bırakın.
Alternatif olarak Outline görünümündeki “Gui” köküne sağ tıklayın ve açılan bağlam menüsünden Add ▸ [type] seçeneğini seçin.
Eklemek istediğiniz türün klasör simgesine sağ tıklayıp Add ▸ [type] seçeneğini de seçebilirsiniz.
GUI bileşeni bir düğüm kümesinden oluşur. Düğümler basit öğelerdir. Düzenleyicide ya da çalışma sırasında betiklerle dönüşümleri değiştirilebilir (taşınabilir, ölçeklenebilir ve döndürülebilir) ve üst-alt düğüm hiyerarşilerinde sıralanabilirler. Şu düğüm türleri bulunur:
Düğüm eklemek için Nodes klasörüne sağ tıklayın ve önce Add ▸, ardından Box, Text, Pie, Template veya ParticleFx seçeneğini seçin.

A tuşuna basıp GUI’ye eklemek istediğiniz türü de seçebilirsiniz.
Her düğümün, görünümünü belirleyen kapsamlı bir özellik kümesi vardır:
Manual olarak ayarlayarak boyutu değiştirebilirsiniz. Boyut, düğümün sınırlarını tanımlar ve girdiyle düğüm seçerken kullanılır. Bu değere betikle animasyon uygulanabilir (daha fazla bilgi).Automatic olarak ayarlandığında düzenleyici düğümün boyutunu belirler. Manual olarak ayarlandığında boyutu kendiniz belirleyebilirsiniz.gui.pick_node() ile seçilemez. Bu özelliği program yoluyla değiştirmek ve kontrol etmek için gui.set_enabled() ve gui.is_enabled() kullanın.gui.pick_node() ile seçilebilir. Bu özelliği program yoluyla değiştirmek ve kontrol etmek için gui.set_visible() ve gui.get_visible() kullanın.0 değeri satır aralığı bırakmaz. 1 (varsayılan değer) normal satır aralığı sağlar.Alpha, düğümün piksel değerlerini arka planla alfa harmanlaması kullanarak birleştirir. Bu, grafik yazılımlarındaki “Normal” harmanlama moduna karşılık gelir.Add, düğümün piksel değerlerini arka plan değerlerine ekler. Bu, bazı grafik yazılımlarındaki “Linear dodge” moduna karşılık gelir.Multiply, düğümün piksel değerlerini arka plan değerleriyle çarpar.Screen, düğümün piksel değerlerini arka plan değerleriyle ters çarpar. Bu, grafik yazılımlarındaki “Screen” harmanlama moduna karşılık gelir.Olası değerler Center, North, South, East, West, North West, North East, South West veya South East değerleridir.

Düğümün dayanak noktasını değiştirirseniz düğüm, yeni dayanak noktası düğümün konumunda olacak şekilde taşınır. Metin düğümleri, Center metni ortaya, West sola ve East sağa hizalayacak şekilde hizalanır.

Şu sabitleme modları kullanılabilir:
None (hem X Anchor hem de Y Anchor için), düğümün üst düğümün veya sahnenin merkezine göre konumunu, bunların uyarlanmış boyutuna oranla korur.Left veya Right (X Anchor), düğümün yatay konumunu ölçekleyerek üst düğümün veya sahnenin sol ve sağ kenarlarına göre konumunu aynı yüzdede tutar.Top veya Bottom (Y Anchor), düğümün dikey konumunu ölçekleyerek üst düğümün veya sahnenin üst ve alt kenarlarına göre konumunu aynı yüzdede tutar.
Mantıksal çözünürlüğün tipik bir yatay ekran çözünürlüğü olduğu sahnede oluşturulmuş bir düğüm:

Sahneyi dikey bir ekrana sığdırmak, sahnenin esnetilmesine neden olur. Her düğümün sınırlayıcı kutusu da benzer şekilde esnetilir. Ancak uyarlama modu ayarlanarak düğüm içeriğinin en boy oranı korunabilir. Şu modlar kullanılabilir:
Fit, düğüm içeriğini esnetilmiş sınırlayıcı kutunun genişliği veya yüksekliğinden küçük olanına eşit olacak şekilde ölçekler. Başka bir deyişle içerik, düğümün esnetilmiş sınırlayıcı kutusunun içine sığar.Zoom, düğüm içeriğini esnetilmiş sınırlayıcı kutunun genişliği veya yüksekliğinden büyük olanına eşit olacak şekilde ölçekler. Başka bir deyişle içerik, düğümün esnetilmiş sınırlayıcı kutusunu tamamen kaplar.Stretch, düğüm içeriğini düğümün esnetilmiş sınırlayıcı kutusunu dolduracak şekilde esnetir.
GUI sahnesinin Adjust Reference özelliği Disabled olarak ayarlanmışsa bu ayar yok sayılır.
None, düğümü her zamanki gibi işler.Stencil, düğümün sınırlarının, düğümün alt düğümlerini kırpmak için kullanılan bir şablon maskesi tanımlamasını sağlar.Ayrıntılar için GUI kırpma kılavuzuna bakın.
Pivot, Anchors ve Adjust Mode özelliklerinin birleşimi, GUI tasarımında büyük esneklik sağlar; ancak somut bir örneğe bakmadan bunların birlikte nasıl çalıştığını anlamak biraz zor olabilir. 640x1136 boyutunda bir ekran için oluşturulmuş bu GUI taslağını örnek alalım:

Kullanıcı arayüzü, X ve Y Anchors değerleri None olarak ayarlanarak oluşturulmuştur ve her düğümün Adjust Mode ayarı, varsayılan Fit değerinde bırakılmıştır. Üst panelin Pivot noktası North, alt panelinki South, üst paneldeki çubukların dayanak noktaları ise West olarak ayarlanmıştır. Diğer düğümlerin dayanak noktaları Center olarak ayarlanmıştır. Pencereyi daha geniş olacak şekilde yeniden boyutlandırırsak şu sonuç ortaya çıkar:

Peki, üst ve alt çubukların her zaman ekran kadar geniş olmasını istersek ne yapabiliriz? Üstteki ve alttaki gri arka plan panellerinin Adjust Mode değerini Stretch olarak değiştirebiliriz:

Bu daha iyi oldu. Gri arka plan panelleri artık her zaman pencere genişliğine kadar esnetilir; ancak üst paneldeki çubuklar ve alttaki iki kutu doğru konumlandırılmamıştır. Üstteki çubukların solda kalmasını istiyorsak X Anchor değerini None yerine Left olarak değiştirmemiz gerekir:

Üst panel için tam olarak istediğimiz sonuç budur. Üst paneldeki çubukların Pivot noktaları zaten West olarak ayarlanmıştı. Bu nedenle çubuklar, sol/batı kenarları (Pivot) üst panelin sol kenarına (X Anchor) sabitlenmiş olarak düzgün biçimde konumlanır.
Şimdi soldaki kutunun X Anchor değerini Left, sağdaki kutunun X Anchor değerini Right olarak ayarlarsak şu sonucu elde ederiz:

Bu, tam olarak beklenen sonuç değildir. İki kutunun, üst paneldeki iki çubuk gibi sol ve sağ kenarlara yakın kalması gerekir. Bunun nedeni Pivot noktasının yanlış olmasıdır:

Her iki kutunun Pivot noktası da Center olarak ayarlanmıştır. Bu, ekran genişlediğinde kutuların merkez noktasının (dayanak noktasının) kenarlardan aynı oransal uzaklıkta kalacağı anlamına gelir. Soldaki kutu, ilk 640x1136 boyutundaki pencerede sol kenardan %17 uzaklıktaydı:

Ekran yeniden boyutlandırıldığında soldaki kutunun merkez noktası sol kenardan yine %17 uzaklıkta kalır:

Pivot noktasını soldaki kutu için Center yerine West, sağdaki kutu için de East olarak değiştirip kutuları yeniden konumlandırırsak ekran yeniden boyutlandırıldığında bile istediğimiz sonucu elde ederiz:

Tüm düğümler “Nodes” klasörü altında listelendikleri sırayla işlenir. Listenin en üstündeki düğüm önce çizilir ve bu nedenle diğer tüm düğümlerin arkasında görünür. Listedeki son düğüm en son çizilir; yani diğer tüm düğümlerin önünde görünür. Bir düğümün Z değerini değiştirmek, çizim sırasını belirlemez; ancak Z değerini işleme betiğinizin işleme aralığı dışında bir değere ayarlarsanız düğüm artık ekrana işlenmez. Düğümlerin indeks sıralamasını katmanlarla geçersiz kılabilirsiniz (aşağıya bakın).

Düğümü yukarı veya aşağı taşıyarak indeks sırasını değiştirmek için bir düğüm seçin ve Alt + Up/Down tuşlarına basın.
Çizim sırası betikte değiştirilebilir:
local bean_node = gui.get_node("bean")
local shield_node = gui.get_node("shield")
if gui.get_index(shield_node) < gui.get_index(bean_node) then
gui.move_above(shield_node, bean_node)
end
Bir düğümü başka bir düğümün alt düğümü yapmak için onu, üst düğümü olmasını istediğiniz düğümün üzerine sürükleyin. Üst düğümü olan bir düğüm, üst düğümün dayanak noktasına göre üst düğüme uygulanan dönüşümü (konum, dönme ve ölçek) devralır.

Üst düğümler alt düğümlerinden önce çizilir. Üst ve alt düğümlerin çizim sırasını değiştirmek ve düğümlerin işlenmesini optimize etmek için katmanları kullanın (aşağıya bakın).
Katmanlar, düğümlerin nasıl çizileceği üzerinde ayrıntılı denetim sağlar ve motorun bir GUI sahnesini çizmek için oluşturması gereken çizim çağrılarının (draw call) sayısını azaltmak için kullanılabilir. Motor, bir GUI sahnesinin düğümlerini çizerken bunları aşağıdaki koşullara göre çizim çağrısı gruplarında toplar:
Bir düğüm bu noktalardan herhangi birinde önceki düğümden farklıysa grubu böler ve başka bir çizim çağrısı oluşturur. Kırpma düğümleri her zaman grubu böler; her şablon kapsamı da grubu böler.
Düğümleri hiyerarşilerde düzenleyebilmek, düğümleri yönetilebilir birimler halinde gruplamayı kolaylaştırır. Ancak farklı düğüm türlerini karıştırırsanız hiyerarşiler toplu çizimi (batch rendering) bölebilir:

İşleme hattı düğüm listesinde ilerlerken, türleri farklı olduğu için her düğüm için ayrı bir grup oluşturmak zorunda kalır. Sonuç olarak bu üç düğme toplam altı çizim çağrısı gerektirir.
Düğümlere katmanlar atayarak düğümleri farklı bir sıraya koyabilirsiniz; böylece işleme hattı düğümleri daha az çizim çağrısında gruplayabilir. Önce gereken katmanları sahneye ekleyin. Outline görünümündeki “Layers” klasör simgesine sağ tıklayın ve Add ▸ Layer seçeneğini seçin. Yeni katmanı seçin ve Properties görünümünde Name özelliğine bir değer atayın.

Ardından her düğümün Layer özelliğini ilgili katmana ayarlayın. Katman çizim sırası, normal indeksli düğüm sırasından önce gelir; bu nedenle düğme grafiklerini oluşturan kutu düğümlerini “graphics”, düğme metin düğümlerini ise “text” katmanına ayarlamak şu çizim sırasını oluşturur:
Önce “graphics” katmanındaki tüm düğümler, en üstten başlayarak:
Ardından “text” katmanındaki tüm düğümler, en üstten başlayarak:
Düğümler artık altı yerine iki çizim çağrısında gruplanabilir. Büyük bir performans kazanımı!
Katmanı ayarlanmamış bir alt düğümün, üst düğümünün katman ayarını örtük olarak devraldığını unutmayın. Bir düğümün katmanını ayarlamamak, onu örtük olarak diğer tüm katmanlardan önce çizilen “null” katmanına ekler.