Tüm ekran boyutlarıyla uyumlu yazılım geliştirme

 
Programlama  
459  

Merhaba arkadaşlar.

Bu yazımda birçok ekran boyutu ile uyum sağlayacak yazılım geliştirmek için kendim oluşturduğum Pseudo'u (sözde kod) sizlerle paylaşacağım. Pseudo kodlarıda kullandığınız yazılım diline çevirebilirsiniz.

Biraz kodlardan bahsedeyim. Paylaşacağım kodların genelde oyun geliştiren arkadaşların kullanacağını düşünüyorum. Belli bir boyuttta arkaplan resmimiz var. Kodlar, ekranımızın boyutuna göre resmimizin boyutunu ve şeklini ayarlıyor. Mesela ekran boyutumuzun boyu ile resmimizin boyu veya ekranımızın genişliği ile resmimizin genişliği farklı olabilir. Kodlar bu farklılıklara karşı resmimizi ekrana uyumlu hale getiriyor. Bunu yaparken kesinlikle resmin genişlik ve boy oranlarını bozmuyoruz.

Daha iyi örnek vermek gerekirse:

1) Ekran genişliği < resim genişliği ve ekran boyu < resim boyu:
Resim boyunu, ekran boyu ile aynı boya getir ve resim genişliğini boyuyla aynı oranda küçült. Eğer resim genişliği ekran genişliğinden küçük olursa resmi yatay olarak ortala.

2) Ekran genişliği < resim genişliği ve ekran boyu > resim boyu:
Resmi ekrana dikey ortala. Resmin yatay olarak fazlalıkları ekrandan çıkacak şekilde ortala.

3) Ekran genişliği > resim genişliği ve ekran boyu > resim boyu:
Resmi ekrana yatay ve dikey olarak ortala.

4) Ekran genişliği > resim genişliği ve ekran boyu < resim boyu:
Resim boyunu, ekran boyu ile aynı boya getir ve resim genişliğini boyuyla aynı oranda küçült. Resmi yatay olarak ortala.

Pseudo kodlarımı aşağıdaki şekilde olacaktır:

pseudo kodu:double sekilRatio = 1, fazlikL = 0, fazlikT = 0;

double Fazlalik(double x, double y)
{
double fazlalik = x - y;
return fazlalik / 2;
}

void Main() {
double monW, monH, resW, resH;
monW = ekran.Width;
monH = ekran.Height;
Image Resim = new Image();
Resim.URL = "background.jpg";
resW = Resim.Width;
resH = Resim.Height;
if (monH < resH)
{
double resRatio, monRatio, imonW;
resRatio = resH / resW;
monRatio = monH / monW;
imonW = monH / resRatio;
Resim.Width = imonW;
Resim.Height = monH;
if (monRatio > resRatio)
{
fazlikL = Fazlalik(imonW, monW) * -1; /* -1 ile çarpmak yerine abs fonksiyonu kullanılabilir */
}
else if (monRatio < resRatio)
{
fazlikL = Fazlalik(monW, imonW);
}
Resim.Left = fazlikL;
sekilRatio = monH / resH;
}
else if (monH >= resH)
{
if (monH > resH)
{
fazlikT = Fazlalik(monH, resH);
}
if (monW > resW)
{
fazlikL = Fazlalik(monW, resW);
}
else if (monW < resW)
{
fazlikL = Fazlalik(resW, monW) * -1; /* -1 ile çarpmak yerine abs fonksiyonu kullanılabilir */
}
Resim.Left = fazlikL;
Resim.Top = fazlikT;
}
}

Yukarıdaki kodlarda bilmemiz gerekenler:

İlk olarak yukarıda ondalık olarak tanımladığım 3 global değişken ilginizi çekmiştir. Bunlardan sekilRatio, resim ve ekran boyunun arasındaki oranın değerini taşır ki bu da bize arkaplan resmi ile aynı oranlı şekiller (resimler) yapmışsak onları yazılımımızda orantılı bir hale getirir. Diğer fazlikL ve fazlikT bir birleriyle bağlantılı olarak resmin üsten-alttan ve soldan-sağdan olan fazlalık veya azlıklarının değerlerini taşır. Fazlalik metodu/fonksiyonu verilen değerlere göre azlık ve fazlalık değerlerini verir. Main metodu tahmin edersinizki sizin kullandığınız yazılım diline göre program çalıştığında çalışacak ilk metod dur.

Kodlarla ilgili anlatabileceğim bu kadar, hepinize kolay gelsin.