Dinamik UI çalışmaları

Kaptan Yosun

Moderatör
Moderatör
Geliştirici
Yardımsever Üye
Mesaj
1.260
Çözümler
45
Beğeni
1.798
Puan
1.339
Ticaret Puanı
0
Yeni bir UI dizayn paketi satın aldım, hobi olarak Metin2'ye uyarlamak istedim. Uyarlarken fark ettim ki Metin2'nin arayüz elementlerinin hiç biri dinamik boyutlandırılmıyor. 4k monitör de kullansanız envanterin uzunluğu 560pixel, 480p monitör de kullansanız envanter uzunluğu 560pixel.

Demek istediğim bu:
1080p.webp
720p.webp


Yani 4k monitörde oyunu açsanız envanter karınca duası gibi kalacak.

Ben çalışmaya introselect ve introcreate'ten başladım. Şimdilik yapabildiğim doğru hesap formülünü bulup (Tabiki de yapay zekayla) karakteri bütün çözünürlüklerde ekranın aynı noktasına yerleştirmek ve karakterin göreceli ebatlarının farklı çözünürlüklerde ekrana nazaran aynı oran-orantıda olmasını sağlamak.

introselect_scaling.webp


Arkadaki pencere 1080p, öndeki ufak olan ise 720p, dikkat ederseniz iki savaşçının da ayakları dikdörtgen içindeki şerit desenin ortasına basıyor, ve iki savaşçının da boyu arkadaki dağın azacık altına kadar geliyor.

Ayrıca sağ-sol rotasyon butonlarının aralığı da sabit değil, çözünürlüğünüze göre daralıp açılıyor.

Ne dediğimi tam anlamadıysanız pencere modunda biri 1080p biri 720p oyun açın ve introselect ekranına gelin. Çözünürlüğünüz farketmezsizin rotasyon butonlarınız arasında aynı sayıda pixel konulmuş olacak, bu 1080p oyundaki butonları birbirine yakın, 720p ekrandakileri birbirine uzak gibi gösterecek. Ayrıca karakterleriniz iki ekranda da aynı pixel uzunluğunda olacağı için 1080p ekranda görece ufak, 720p ekranda görece devasa görünecekler.

Umarım derdimi ve hedefimi iyice açıklayabilmişimdir.
 
Windows'un otomatik ölçeklendirmesi Metin2'ye de uyarlanıyor ancak bu sefer texturelerın netliği bozuluyordu. Binalar, karakterlerin zırhları sanki bulanık gibi gözüküyordu. %100 yapınca da textureler netleşiyor ancak ui ve yazıların ufak kalma sorunu oluyordu. Bu çok güzel bi çalışma. Eğer her şey düzgün olursa win tarafındaki ölçeklendirmeyi varsayılan olarak devredışı bıraktırabilirsin
 
Çalışmalarında başarılar dilerim öncelikle hatırlatmak isterim pencere büyüyebilir fakat örneğin karakterin item penceresi büyüse bile orada bir dds kullanıldığı için dds boyutu sabit ama pencere büyüyecektir ve ya envanter içinde öyle. ama diğer pencereler için dinamik yapı oluşturulabilir. Bunun için PythonWindow.h dosyasında uiscripte style olarak kullandığımız flaglar var oraya scale gibi bir flag oluşturup ekran çözünürlüğüne göre font boyutuna göre değişmesini sağlayabilirsin
 
Çalışmalarında başarılar dilerim öncelikle hatırlatmak isterim pencere büyüyebilir fakat örneğin karakterin item penceresi büyüse bile orada bir dds kullanıldığı için dds boyutu sabit ama pencere büyüyecektir ve ya envanter içinde öyle. ama diğer pencereler için dinamik yapı oluşturulabilir. Bunun için PythonWindow.h dosyasında uiscripte style olarak kullandığımız flaglar var oraya scale gibi bir flag oluşturup ekran çözünürlüğüne göre font boyutuna göre değişmesini sağlayabilirsin
Evet henüz resimleri nasıl scale edebilirim bilmiyorum, senin fikir mantıklı. Oyunun resim scale edebilme yeteneği var mı emin değilim ama. Mesela login ekranındaki arkaplan resmi scale olabiliyor, aynı şey acaba oyun içi UI elementleri için de uygulanabilir mi
 
metin2 tarihi boyunca yapılmış/yapılmaya çalışılan en boş çalışma ilan ediyorum
 
Evet henüz resimleri nasıl scale edebilirim bilmiyorum, senin fikir mantıklı. Oyunun resim scale edebilme yeteneği var mı emin değilim ama. Mesela login ekranındaki arkaplan resmi scale olabiliyor, aynı şey acaba oyun içi UI elementleri için de uygulanabilir mi
Asıl sorun şu bir çok görüntü metin2de dds formatında. bir resim scale edilebilir mi dds halindeyken bilmiyorum. metin2nin oyun motoruna bu özellik kazandırılabilir mi emin değilim

Bir fikrim var. Eğer metin2deki bütün gridleri pencerelerideki görüntü dosyalarını eğer svg formatında hazırlayabilirsen costüm ekranı envanter ekranı karakter info ekranları minimap vs hepsini svg formatını hazırlayabilirsen. Görüntü bozulmadan rahatça scale edebilirsin ekran boyutlarına göre
 
Client Src'de SetScale metodu zaten varmış, doğru matematik hesaplarıyla loading bar'ı scale etmeyi başardım.
UiScriptte kullanmak için "x_scale" ve "y_scale" parametrelerine doğru hesaplamayı vermeniz gerek:

Python:
Genişlet Daralt Kopyala
        if True == value.has_key("x_scale") and True == value.has_key("y_scale"):
            window.SetScale(float(value["x_scale"]), float(value["y_scale"]))

1749325309453.webp
 
Geri
Üst