Windows Phone 7 (WP7) ile programlamaya başlangıç

Bu yazı dizisi ile birlikte Windows Phone 7 (WP7) uygulama geliştirme konusunu inceliyor olacağız.

WP7 uygulamalarını Visual Studio 2010, Expression Blend, Silverlight ve XAML gibi mevcut Microsoft araçları üzerine inşa ediyoruz.

WP7, uygulama geliştirmemiz için temel olarak iki framework sağlar;

  • Silverlight Framework Bu framework ile olay tabanlı (XAML sayesinde) uygulamalar geliştirebiliriz
  • XNA Games Framework Bu framework sayesinde, zengin 2D ve 3D oyunlar geliştirebiliriz

Windows Phone 7 Uygulama Geliştirme Gereksinimleri

Visual Studio 2010 kurulu bilgisayarımıza Windows Phone SDK 7.1 indirip kurmamız gerekiyor.

Windows Phone SDK 7.1 kurulumu sonrasında bilgisayarımıza aşağıdaki araçlar kurulmuş olacak;

  • Microsoft Visual Studio 2010 Express for Windows Phone
  • Windows Phone Emulator
  • Windows Phone SDK 7.1 Assemblies
  • Silverlight 4 SDK and DRT
  • Windows Phone SDK 7.1 Extensions for XNA Game Studio 4.0
  • Microsoft Expression Blend SDK for Windows Phone 7
  • Microsoft Expression Blend SDK for Windows Phone OS 7.1
  • WCF Data Services Client for Window Phone
  • Microsoft Advertising SDK for Windows Phone

Ayrıca Visual Studio 2010 kurulumumuza, New Project dialog penceresinden erişebileceğimiz yeni proje şablonları da eklenmiş oluyor.

Not : App Hub - Developer Resources sayfasından, hem ihtiyacımız olacak araçlara, hem de faydalı dokümanlara ulaşabiliriz.

Windows Phone 7 Mimarisi

MSDN‘de yer alan Application Platform Overview for Windows Phone makalesine göre, mimari şu şekilde;

WP7 mimarisinin 4 temel bileşeni;

  • Runtimes Silverlight ve XNA framework, optimize edilmiş uygulama oluşturmak için geliştiriciler için mükemmel bir ortam sağlar
  • Araçlar Visual Studio 2010 ve Expression Blend araçları kullanıcıya zengin uygulamalar tasarlamak ve geliştirmek için geliştiricilere esnek bir ortam sağlar
  • Cloud Services Windows ve SQL Azure, Notification Services, Location Services ve diğer 3. parti servis desteği ile geliştiricilere esnek bir geliştirme ortamı sağlar
  • Portal Services WP7 Market Place geliştiricilere, uygulamalarını yükleme ve sertifika yönetimi imkanı sağlar

Silverlight ve Windows Phone 7 Silverlight, XAML (Extensible Application Markup Language) dili ile uygulamalar ve basit 2D oyunlar geliştirmek için kullanılır. Geliştiriciler kolaylıkla Visual Studio veya Microsoft Blend gibi araçlar sayesinde XAML kodları üretebilirler.

XNA ve Windows Phone 7 XNA, temelde zengin 2D ve 3D oyunlar geliştirmek için kullanılır.

Market Place Sertifikasyon Süreci

Windows Phone 7 için geliştirdiğimiz uygulamaları, Market Place‘e göndermeden önce kontrol etmemiz gereken, WP7‘ye özgü maddeler vardır.

Bu maddelere MSDN‘de yeralan Application Certification Requirements for Windows Phone sayfasından ulaşabiliriz.

Donanım

Şu anda piyasada bulunan Windows Phone cihazları tek bir ekran çözünürlüğüne sahiptir (480 x 800). Yakın gelecekte çıkacak yeni versiyonların birden fazla ekran çözünürlüğünü desteklemesi bekleniyor.

Windows Phone cihazların ortak yönlerinden biri, ön yüzlerinde aynı butonların bulunmasıdır;

Geri Butonu sayesinde uygulamalar ekranlar arası geri dönüş işlevlerini sağlayabilirler. İnternet tarayıcılarda bulunan Geri butonu ile aynı işleve sahiptir. Uygulamanın açılış ekranında kullanılması durumunda, ilgili uygulamanın kapatılmasına sebep olur

Windows Butonu kullanıcının telefonun başlangıç ekranına dönmesini sağlar

Arama Butonu sayesinde kullanıcılar telefonun arama özelliğini çağırabilirler

Sensörler Windows Phone 7 telefonlarda geliştiriciler için en çok öneme sahip sensörler;

  • WI-FI : telefonların internete bağlanmak için kullandıkları bağlantı noktalarından biridir. WP7 telefonlarda Internet Explorer tarayıcısı gelmektedir
  • Camera : WP7 telefonlar en az 5MP kamera ve flaş desteğine sahiptir. Uygulamalar kamerayı veri giriş aracı olarak kullanabilirler
  • Accelerometer : İvmeölçer sayesinde uygulamalar telefonun 3 koordinat düzlemine göre (X-Y-Z) tutuluş bilgisini öğrenebilir
  • GPS : GPS sayesinde uygulamalar, telefonun dünya üzerindeki konum bilgisini alabilirler

Visual Studio 2010 ile New Project dialog penceresini açalım, Installed Templates kısmında yer alan proje şablon gruplarından Silverlight for Windows Phone‘u seçelim.

Sağ tarafa gelen proje şablonlarından Windows Phone Application‘ı seçip, projeye bir isim verelim ve OK butonuna tıklayarak projenin oluşturulmasını sağlayalım.

Eğer tüm güncellemeleri yaptıysak, proje oluşturulması sırasında Windows Phone 7 ve Windows Phone 7.1 (Mango) arasında seçim yapabileceğimiz bir dialog kutusu görmemiz lazım

Proje oluşturulduktan sonra çalıştıracak olursak eğer, ilk olarak Windows Phone Emulator yüklenecek, ardından ilk uygulamamız ekranda belirecektir.

INETA Türkiye Yazılımcılar Kayseri'de Buluşuyor Etkinliği

INETA Türkiye olarak 17 Mart 2012, 18 Mart 2012 tarihlerinde Kayseri Erciyes Üniversitesinde gerçekleştireceğimiz Yazılımcılar Kayseri’de Buluşuyor etkinliğimizin detayları şöyle,

INETA Türkiye Yazılımcılar Kayseri

Etkinliğe kayıt olmak için buraya tıklayın!

Erciyes Üniversitesini harita üzerinde bulmak için buraya tıklayın

INETA Türkiye Yazılımcılar İstanbul'da Buluşuyor Etkinliği

INETA Türkiye olarak 18 Şubat 2012, 19 Şubat 2012 tarihlerinde Microsoft Türkiye İstanbul ofisinde gerçekleştireceğimiz Yazılımcılar İstanbul’da Buluşuyor etkinliğimizin detayları şöyle,

INETA Türkiye Yazılımcılar İstanbul

Etkinliğe kayıt olmak için buraya tıklayın! Etkinliğe kayıt olmanız, güvenliğe teslim edilecek listede yer almanız ve içeriye rahat giriş yapabilmeniz için önemli!

Microsoft Türkiye İstanbul ofisi ile ilgili iletişim bilgilerine ulaşmak için buraya tıklayın

StringBuilder alternatifi olarak String.Join

String sınıfının immutable olduğunu duymayanımız kalmamıştır (bknz; string sınıfı neden immutable?)

string tipindeki bir değişkenin değeri üzerinde sürekli değişiklik yapıp Garbage Collector‘a gereksiz iş oluşturmak yerine, StringBuilder sınıfını kullanırız (Garbage Collector hakkında detaylı bilgi için bknz; Garbage Collector Temelleri ve Performans Noktaları)

Çeşitli sebeplerden dolayı (Loglama, XML veya JSON veri üretme, vs) sınıflarımızın ToString() method’larını override ederiz (bknz; ToString() Method’unu override etmek)

ToString() method’undan geriye string değer döndüreceğimiz için method içerisinde string değer tutabilecek bir değişkene ihtiyaç duyarız. Bu değişken yukarıda bahsettiğimiz nedenlerden dolayı genelde StringBuilder tipinde olur.

Örnek ProductOrderCollection sınıfımızın ProductID ve Orders isminde property‘leri olduğunu varsayalım;

public class ProductOrderCollection { public int ProductID { get; set; }

public IEnumerable&lt;Order&gt; Orders{ get; set; } }</pre>

ToString() method’unu override ettiğimiz örnek kod parçası;

public override string ToString()
{
    StringBuilder sb = new StringBuilder();
    sb.Append("Product{Id=");
    sb.Append(this.Id);
    sb.Append(",Orders=");
    if (this.Orders == null)
    {
        sb.Append("null");
    }
    else
    {
        sb.Append("[");
        for (int i = 0; i < this.Orders.Length; i++)
        {
            if (i > 0 && i < this.Orders.Length - 1)
            {
                sb.Append(",");
            }

            sb.Append(this.Orders[i]);
        }

        sb.Append("]");
    }

    sb.Append("}");

    return sb.ToString();
}

Yukarıdaki örnek kod sayesinde ProductOrderCollection sınıfının verilerinden JSON değer üretebiliriz.

StringBuilder sınıfı yerine String.Join methodunu kullanarak yapacak olsaydık;

</pre><pre class="brush:csharp">public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append(“Product{Id=”); sb.Append(this.Id); sb.Append(“,Orders=”); if (this.Orders == null) { sb.Append(“null”); } else { sb.Append(“[”); sb.Append(string.Join(“,”, this.Orders)); sb.Append(“]”); }

sb.Append("}");

return sb.ToString(); }</pre>

Hatta if/else kod parçasını daha da kısaltabiliriz;

public override string ToString()
{
    StringBuilder sb = new StringBuilder();
    sb.Append("Product{Id=");
    sb.Append(this.Id);
    sb.Append(",Orders=");
    sb.Append(this.Orders == null ? "null" : "[" + string.Join(",", this.Orders) + "]");
    sb.Append("}");

    return sb.ToString();
}

StringBuilder sınıfını hiç kullanmamak için;

public override string ToString()
{
    return string.Join("Product{Id=", this.Id, ",Orders=", this.Orders == null ? "null" : "[" + string.Join(",", this.Orders) + "]", "}");
}


XNA Tarihçe

XNA tarihçesine baktığımızda, ilk filizlerin 1995 yılında atıldığını görüyoruz.

Windows 95 çıkana kadar, oyunların direk donanıma erişmesi gerekirdi (Örneğin joystick, grafik kartı veya ses kartına)

Bu yüzden oyun geliştirici firmalar, oyunların içerisine her ses kartı ailesinin, her grafik kartı ailesinin komut setlerini gömerlerdi.

Oyunu başlattığımızda genellikle ilk önce bilgisayarımızda bulunan ses kartını ve grafik kartını seçerdik, böylece oyun hangi komut setini kullanacağını bilirdi.

Windows 95 ile birlikte Microsoft, (o zamanki adıyla) Windows Game SDK ismini verdiği bir kütüphane geliştirdi.

Bu kütüphane sayesinde oyunlar direk donanıma erişmek yerine, ara bir katmana erişecekler, böylece donanım’a özel komut setlerini bilmelerine gerek kalmayacaktı.

Windows Game SDK, tanıtılmasından kısa bir süre sonra DirectX 1.0 adı ile yayınlandı.

DirectDraw, DirectInput ve DirectSound katmanlarını içeriyordu. X karakteri, Direct öneki ile başlayan tüm isimleri kısaltmak için seçilmişti.

DirectX öncesinde çeşitli donanımlar ile konuşmanın standart olmaması oyun geliştirmenin en zor yanlarından biriydi. Genellikle geliştirilen oyunlar birden fazla donanım ailesi ile çalışabilecek şekilde yazılırdı, bu da geliştirme süresini ve kodların karmaşıklığını arttırırdı.

DirectX ile birlikte yazılımın donanım ile konuşacağı standart bir dil oluşturulmuş oldu.

Böylelikle oyunlar aslında donanım ile değil, DirectX katmanı ile konuşuyorlar, donanım ile konuşmak ise DirectX‘in görevi oluyor.

1.0 versiyonunda sonra DirectX yıllar içerisinde oldukça yol aldı. 11.0 versiyonu Windows7 ile birlikte duyuruldu. (DirectX9 ile arasındaki tek fark Direct3D katmanının 11.0 versiyona yükseltilmesi)

DirectX, 7.0 versiyonundan itibaren C harici dilleri desteklemeye başladı. İlk başlarda sadece Visual Basic desteklenirken, DirectX 9.0 ile birlikte .Net desteği geldi.

Ayrıca DirectX 8.0, Programlanabilir Shader desteğine sahip ilk sürüm haline getirildi.

DirectX’e .Net desteği gelmesi ile birlikte (Managed DirectX) oyun geliştiriciler tarafında büyük etki yarattı. 2006 yılında XNA adı altında toplanana kadar çok fazla oyun geliştirici tarafından kullanıldı.

XNA 4.0 versiyonu ile birlikte hem Windows, hem Xbox 360, hem de Windows Phone 7 platformlarına oyun geliştirilebiliyor.

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı