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, mobil cihazlarda ekran yönelimi değişikliklerine otomatik olarak uyum sağlayan grafik kullanıcı arayüzlerini (GUI) destekler. Bu özelliği kullanarak çeşitli ekran boyutlarının yönelimine ve en boy oranına uyum sağlayan GUI tasarlayabilirsiniz. Belirli cihaz modellerine uyan yerleşimler (layout) oluşturmak da mümkündür.
Varsayılan olarak game.project ayarları, ekran profilleri (display profiles) için yerleşik bir ayar dosyasının (“builtins/render/default.display_profiles”) kullanılacağını belirtir. Varsayılan profiller “Landscape” (1280 piksel genişlik ve 720 piksel yükseklik) ve “Portrait” (720 piksel genişlik ve 1280 piksel yükseklik) olarak tanımlanmıştır. Profillerde herhangi bir cihaz modeli ayarlanmadığından bu profiller her cihazla eşleşir.
Yeni bir profil ayar dosyası oluşturmak için “builtins” klasöründeki dosyayı kopyalayın veya Assets görünümünde uygun bir konuma sağ tıklayın ve New... ▸ Display Profiles seçeneğini seçin. Yeni dosyaya uygun bir ad verin ve Ok düğmesine tıklayın.
Düzenleyici şimdi yeni dosyayı düzenlemek üzere açar. Profiles listesindeki + düğmesine tıklayarak yeni profiller ekleyin. Her profile bir niteleyici (qualifier) kümesi ekleyin:
iPhone10, “iPhone10,*” modelleriyle eşleşir. Virgül içeren model adları tırnak içine alınmalıdır; örneğin "iPhone10,3", "iPhone10,6", iPhone X modelleriyle eşleşir (iPhone vikisine bakın). sys.get_sys_info() çağrıldığında cihaz modeli bildiren tek platformların Android ve iOS olduğunu unutmayın. Diğer platformlar boş bir dize döndürür ve bu nedenle cihaz modeli niteleyicisi olan bir ekran profilini hiçbir zaman seçmez.
Motorun yeni profillerinizi kullanması gerektiğini de belirtmeniz gerekir. game.project dosyasını açın ve display altındaki Display Profiles ayarında ekran profilleri dosyasını seçin:

Cihaz döndürüldüğünde motorun dikey ve yatay yerleşimler arasında otomatik geçiş yapmasını istiyorsanız Dynamic Orientation kutusunu işaretleyin. Motor, eşleşen bir yerleşimi dinamik olarak seçer ve cihazın yönelimi değişirse seçimi de değiştirir.
Display Profiles kaynağında “Auto Layout Selection” seçeneği bulunur (varsayılan olarak ON). ON olduğunda motor, hem sahne oluşturulduğunda hem de pencere/ekran boyutu değiştiğinde en iyi eşleşen GUI yerleşimini otomatik olarak seçer. OFF olduğunda motor yerleşimleri otomatik olarak değiştirmez; yerleşimler arasında elle geçiş yapmak için GUI betiğinizden gui.set_layout() işlevini kullanın. Bu ayar Display Profiles dosyasında saklanır ve tüm GUI sahnelerini etkiler.
Geçerli ekran profilleri kümesi, GUI düğümü (GUI node) düzeninizin yerleşim çeşitlerini oluşturmak için kullanılabilir. Bir GUI sahnesine yeni bir yerleşim eklemek için Outline görünümündeki Layouts simgesine sağ tıklayın ve Add ▸ Layout ▸ ... seçeneğini seçin:

Bir GUI sahnesi düzenlenirken tüm düğümler belirli bir yerleşimde düzenlenir. O anda seçili yerleşim, araç çubuğundaki GUI sahnesi yerleşimi açılır listesinde gösterilir. Hiçbir yerleşim seçilmemişse düğümler Default yerleşiminde düzenlenir.


Bir yerleşim seçiliyken bir düğüm özelliğinde yaptığınız her değişiklik, özelliğin Default yerleşimindeki değerini o yerleşim için geçersiz kılar (override). Geçersiz kılınan özellikler maviyle işaretlenir. Geçersiz kılınan özellikleri olan düğümler de maviyle işaretlenir. Geçersiz kılınan herhangi bir özelliği özgün değerine döndürmek için yanındaki sıfırlama düğmesine tıklayabilirsiniz.

Bir yerleşim düğümleri silemez veya yeni düğüm oluşturamaz; yalnızca özellikleri geçersiz kılabilir. Bir düğümü bir yerleşimden kaldırmanız gerekiyorsa düğümü ekran dışına taşıyabilir veya betik mantığıyla silebilirsiniz. O anda seçili yerleşime de dikkat etmeniz önerilir. Projenize bir yerleşim eklerseniz yeni yerleşim, o anda seçili yerleşime göre ayarlanır. Ayrıca düğümler kopyalanıp yapıştırılırken, hem kopyalama hem de yapıştırma sırasında o anda seçili yerleşim dikkate alınır.
Auto Layout Selection etkinleştirildiğinde motor, en iyi eşleşen yerleşimi otomatik olarak seçer. Dinamik yerleşim eşleştirmesi, her ekran profili niteleyicisine aşağıdaki kurallara göre bir puan verir:
Ayarlanmış bir cihaz modeli yoksa veya cihaz modeli eşleşiyorsa niteleyici için bir puan (S) hesaplanır.
Puan (S); ekranın alanı (A), niteleyicideki alan (A_Q), ekranın en boy oranı (R) ve niteleyicinin en boy oranı (R_Q) kullanılarak hesaplanır:
Niteleyicinin yönelimi (yatay veya dikey) ekranla eşleşiyorsa en düşük puanlı niteleyiciye sahip profil seçilir.
Aynı yönelimde bir niteleyicisi olan profil bulunamazsa diğer yönelimdeki en iyi puanlı niteleyiciye sahip profil seçilir.
Hiçbir profil seçilemezse yedek Default profili kullanılır.
Daha iyi eşleşen bir yerleşim yoksa çalışma sırasında yedek olarak Default yerleşimi kullanılır. Bu nedenle bir “Landscape” yerleşimi eklerseniz bir “Portrait” yerleşimi de ekleyene kadar “Landscape”, tüm yönelimler için en iyi eşleşme olur.
Yerleşim değiştiğinde GUI bileşeninin (component) betiğine bir layout_changed iletisi gönderilir. Bu, motor yerleşimi otomatik olarak değiştirdiğinde (Auto Layout Selection ON) veya betiğiniz gui.set_layout() işlevini çağırıp yerleşim gerçekten değiştiğinde gerçekleşir. İleti, yerleşimin karma değeri alınmış tanımlayıcısını (hashed identifier) içerir; böylece betik, hangi yerleşimin seçildiğine bağlı olarak mantık çalıştırabilir:
function on_message(self, message_id, message, sender)
if message_id == hash("layout_changed") and message.id == hash("My Landscape") then
-- switching layout to landscape
elseif message_id == hash("layout_changed") and message.id == hash("My Portrait") then
-- switching layout to portrait
end
end
Ayrıca görüntü oluşturma akışını yöneten geçerli işleme betiği (render script), pencere (oyun görünümü) her değiştiğinde bir ileti alır; buna yönelim değişiklikleri de dahildir.
function on_message(self, message_id, message)
if message_id == hash("window_resized") then
-- The window was resized. message.width and message.height contain the
-- new dimensions of the window.
end
end
Yönelim değiştiğinde GUI yerleşim yöneticisi, GUI düğümlerini yerleşiminize ve düğüm özelliklerine göre otomatik olarak ölçekler ve yeniden konumlandırır. Oyun içi içerik ise (varsayılan olarak) ayrı bir geçişte, geçerli pencereye gerilerek sığdırılan bir izdüşümle işlenir. Bu davranışı değiştirmek için kendi değiştirilmiş işleme betiğinizi sağlayın veya bir kamera kütüphanesi kullanın.
Kullanılan Display Profiles için Auto Layout Selection OFF olduğunda motor yerleşimleri otomatik olarak değiştirmez. Yerleşimleri elle yönetmek için bir GUI betiğinden şu işlevleri kullanın:
true; aksi durumda false.layout_changed iletisini gönderir.Örnek:
function init(self)
-- Manually apply the "Portrait" layout
local ok = gui.set_layout("Portrait")
if not ok then
print("Portrait layout not found in this scene")
end
end
vmath.vector3(width, height, 0) değerine eşleyen bir tablo döndürür.Örnek:
local layouts = gui.get_layouts()
for id, size in pairs(layouts) do
print(id, size.x, size.y)
end
Not: Bir GUI yerleşimi sahnede var ama Display Profiles içinde bulunmuyorsa gui.set_layout(), yerleşime özgü düğüm özelliklerinin geçersiz kılınmasını yine de uygular, ancak sahne çözünürlüğünü değiştirmez.