folder Tahribat.com Forumları
linefolder Mobil Programlama
linefolder Windows Phone Mango Ve XNA 4.0 İle Oyun Programlamaya Giriş [Doküman]



Windows Phone Mango Ve XNA 4.0 İle Oyun Programlamaya Giriş [Doküman]

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unix
    Andrei
    Andrei's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Aralık/2008
    Erkek

    XNA 4.0 ile Yazı Yazdırmak

     

    1. Adım : Yeni bir proje olusturarak, C# bölümü altında XNA Game Studio 4.0'ı, ardından
    Windows Phone Game'i secelim. .NET Framework 4 olarak kalsın. Son olarak projemize bir
    isim verip onayladıktan sonra, bize Windows Phone sürümleri icin bir secim yaptırılacak,
    ben 7.1, yani Mango sürümünü sectim.

     

     

    2. Adım : Yeni projemizi olusturduk. Simdi burada dikkatinizi cekmek istedigim bir husus
    var, görüldügü gibi Game1.cs icinde bazı kodlar otomatik olarak olusturulmus, eger XNA
    kullanarak daha önce Windows Game ya da Xbox 360 Game projesi olusturduysanız,
    kodların benzer oldugunu görebilirsiniz, bu bize XNA'in sagladıgı kolaylıklardan birisidir.

     

     

    3. Adım : F5 tusuna basarak projemizi derleyip calıstıralım. Biraz bekledikten sonra
    bilgisayarımızın hızına baglı olarak emülatörümüz acılacak. Acıldıgında mavi ekranımızla
    karsılacaksınız. (Windows'un meshur mavi ekranı degil tabii ki.)


    Su an projemizin bos halini görüyoruz, henüz kod yazımına baslamadık. Bir sonraki
    adımdan itibaren artık kod yazmaya baslayacagız.


    4. Adım : Solution Explorer bölümünde Content'e sag tıklayalım. Add – New Item diyerek
    acılan pencerede Sprite Font nesnesini secelim. Nesnenin adı varsayılan olarak
    SpriteFont1.spritefont olacaktır, siz isterseniz uzantısını degistirmeden baska bir isim
    verebilirsiniz. Ben anlatacagım örnekte varsayılanı kullanacagım.

     

     

    5. Adım : Artık kodlamaya gecebiliriz. Öncelikle degiskenimizi yazdırmalıyız. Game1.cs dosyasını acıyoruz.

    public class Game1 : Microsoft.Xna.Framework.Game
    {
    
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    SpriteFont font1; // font1 adlı degiskenimizi olusturduk.
    
    public Game1()
    {
    graphics = new GraphicsDeviceManager(this);
    Content.RootDirectory = “Content”;
    TargetElapsedTime = TimeSpan.FromTicks(333333);
    
    }

    6. Adım : Font degiskenimizi olusturduk, peki isimiz bitti mi ? Hayır, simdi olusturdugumuz bu degiskeni, LoadContent() metodu icinde cagırmalıyız.

     

    protected override void LoadContent()
    {
    spriteBatch = new SpriteBatch(GraphicsDevice);
    //fontumuzu yüklüyoruz.
    font1 = Content.Load(“SpriteFont1”);
    }

    Burada Content.Load metodunun calısma mantıgına kısaca deginecek olursak, <> simgeleri
    arasında yüklenecek nesnenin tipini belirliyoruz, yani bir resim cizdirmek isteseydik,
    degil de olarak yazabilirdik, parantez icindeki bölüm de Content klasörümüze
    yüklemis oldugumuz nesnenin adını temsil eder. Son olarak font1 de bildiginiz gibi degiskenimizin
    adıydı.


    7. Adım : Degiskenimiz ve yüklemenin yapılacagı LoadContent metodu hazır, simdi ne
    yapacagız ? Artık Draw metodunu kullanarak yazdırma islemini yapabiliriz. Bunun icin de
    SpriteBatch ve SpriteFont nesnelerini kullanacagız. Draw metoduna gelerek asagıdaki
    kodları yazalım.

     

    protected override void Draw(GameTime gameTime)
    {
    GraphicsDevice.Clear(Color.CornflowerBlue);
    spriteBatch.Begin();
    string yazi = “Merhaba XNA !”;
    Vector2 konum= new Vector(300,300);
    spriteBatch.DrawString(font1, yazi, konum, Color.White);
    spriteBatch.End();
    base.Draw(gameTime);
    }


    Önce burada yazılan kodları tanıyalım. SpriteBatch nesnesini 3 sekilde kullanıyoruz, bunlar
    Begin(), DrawString() ve End() metodları. İsimlerinden de anladıgınız gibi, Begin() metodu, cizim
    islemlerini baslatmak icin ekran kartına gerekli parametreleri gönderir, DrawString(), ekrana
    cizdirilecek nesnenin özelliklerini kapsar, End() metodu da cizdirilecek tüm nesneleri ekledigimizi
    ve SpriteBatch nesnesine cizimlerin gerceklestirmesini söyler.

    string tipi bir “yazi” degiskeni olusturduk ve ekranda görülmesini istedigimiz yazıyı yazdık.
    Vector2 nesnesine dikkat edelim, bu nesneyle 2B konum bilgilerini sonradan kullanmak icin
    saklarız. XNA'in 2B projelerinde cok sık kullanılan bir nesnedir. “konum” adlı bir degisken
    olusturarak koordinat belirledik, standart bir koordinat düzlemini düsünün, apsis ve ordinatı 300
    piksel olarak ayarladık.

    DrawString metodunun bircok kullanım sekli var ama ben bu örnekte kullandıgımız kadarını
    anlatacagım. Parantez icine görüldügü gibi 4 adet parametre girilmis, bunlardan birincisi SpriteFont
    degiskenimizin adı olan “font1”, ikincisi de bu font nesnesini kullanarak yazdırılan “yazi”
    degiskeni, ücüncü parametremiz de yazının telefon ekranındaki koordinatını belirliyor, son olarak,
    yazının rengini seciyoruz, Color sınıfı altında White'ı sectik, yani projeyi calıstırdıgımızda yazımız
    beyaz olacak, isterseniz baska bir renk secebilirsiniz.

     

    8. Adım : Artık projemizi calıstırabiliriz. Yazımız sorunsuzca gözüküyor ama bir problem
    var degil mi ? Evet, yazımız cok kücük. Emülatörümüzün sagındaki menülerden rotasyonu
    degistirelim ve herhangi bir yöne yatıralım. Windows Phone projelerinde varsayılan
    rotasyonumuz Portrait'tir, biz bunu su an emülatörde Landscape olarak görüntülemis olduk,
    simdi biraz daha okunaklı ama yine yetmiyor. Ne yapmalıyız ?

     

     

    9. Adım : Content klasörü altındaki SpriteFont'a cift tıklayalım. 14 yazan
    satıra gelip sayımızı 20 olarak degistirelim. Bu bölümde fontumuzun büyüklügüne kolayca
    müdahale edebiliyoruz. Peki bu büyüklügün sınırı yok mu ? Var. 14-36 arası bir sayı secmek
    durumundayız. 20 olarak belirledikten sonra projemizi tekrar calıstıralım, simdi daha
    okunaklı. Toplamda 9 adımda ekrana nasıl yazı yazılacagını ögrenmis olduk, ben de elimden
    geldigince acıklayıcı anlatmaya calıstım, umarım yararlı olmustur, simdi imaj cizdirmeye
    gecebiliriz.

     

    XNA 4.0 ile Resim Çizdirmek

     

    Oyununuzda ekranda bulunmasını istediginiz karakterleri, arka planları ve diger ögeleri ekrana
    cizdirebilmek icin, resim dosyalarını Content klasörüne yüklememiz gerekir. Content Pipeline
    bircok imaj formatını destekler, bunlar arasında en sık kullanılanlar tahmin edeceginiz gibi .jpg,
    .bmp ve .png'dir. PNG formatı transparanlık sagladıgı icin oyun yazılımcılıgı icin gayet
    kullanıslıdır. Birazdan yapacagımız örnekte PNG formatını kullanacagız.


    Projelerinize ekleyeceginiz resim, ses veya model gibi dosyalar, uygulama Debug edildiginde
    Content Importer'ın erisebilecegi bir hale gelir. Bunu bilmeniz cok önemli degil ama teknik bir bilgi
    olarak aklınızda kalsın. Simdi adım adım ilerleyerek projemize bir imaj cizdirelim.


    1. Adım : Bir önceki konumuzda oldugu gibi, yeni bir proje olusturalım.


    2. Adım : Content klasörüne sag tıklayarak, Add – Existing Item komutunu secelim. Acılan
    pencerenin sag alt kösesinde Content Pipeline'ın destekledigi dosya türlerini göreceksiniz,
    simdi bilgisayarımıza kaydetmis oldugumuz bir PNG resmini secelim ve Add butonuna
    tıklayalım (Dilerseniz sürükle bırak yöntemiyle resminizi Content klasörüne atabilirsiniz.).

     

     

     

    3. Adım : Artık kodlamaya baslayabiliriz, Game1.cs dosyasını acıyoruz.

     

    public class Game1 : Microsoft.Xna.Framework.Game
    
    {
    
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    Vector2 konum = new Vector(0,0); // konum adlı degiskenimizi olusturduk.
    Texture2D resim; // resim adlı degiskenimizi Texture2D nesnesiyle olusturduk.
    
    public Game1()
    {
    graphics = new GraphicsDeviceManager(this);
    Content.RootDirectory = “Content”;
    
    }


    NOT : “konum” degiskenimizin koordinatını 0'a 0 seklinde belirledik. Bu normalde ekranın sol üst
    kösesine tekabül eder. Fakat varsayılan rotasyon Portrait oldugu icin, resminizi önce sag üst kösede
    görebilirsiniz. Landscape yaptıgınız taktirde sol üst köseye gececektir.

     

    4. Adım : LoadContent() metodumuza gelerek yükleme islemlerini baslatalım.

     

    protected override void LoadContent()
    {
    spriteBatch = new SpriteBatch(GraphicsDevice);
    //resmimizi yüklüyoruz.
    resim = Content.Load(“kare”);
    }


    Bir önceki konumuzda Content.Load'un kullanımına deginmistim, gördügünüz gibi bu sefer bazı
    degisiklikler oldu, SpriteFont nesnesi yerine Texture2D nesnesini kullandık ve yükledigimiz
    dosyanın adını parantez icine yazdık. Bunlara dikkat etmeliyiz.


    Eger dilerseniz Properties penceresinden, yüklediginiz resim üzerinde bazı oynamalar
    yapabilirsiniz, size kalmıs.


    5. Adım : Resmimizi Texture2D nesnesine yükledigimize göre artık ekrana cizdirme
    islemini baslatabiliriz. Bunun icin Draw() metoduna gidiyoruz.

     

    protected override void Draw(GameTime gameTime)
    {
    GraphicsDevice.Clear(Color.CornflowerBlue);
    spriteBatch.Begin();
    spriteBatch.Draw(resim, konum, Color.White);
    spriteBatch.End();
    base.Draw(gameTime);
    }


    Yine tanıdık bir kodla karsı karsıyayız, yazı yazdırmada kullandıgımız kodlarla karsılastırırsanız,
    ufak tefek farklılıklar oldugunu göreceksiniz, bu sefer 3 parametre kullandık. İlk parametrede
    kullanılacak olan resmi, yani “texture”u belirttik. İkinci parametrede Vector2 nesnesiyle tanımlanan
    konum bilgilerini cagırdık. Son olarak Color sınıfını kullandık ama burada dikkat etmenizi
    istedigim bir sey var, yazı yazdırırken Color sınıfı renk belirliyordu, peki burada neyi belirliyoruz ?
    Bu sefer White olarak nitelendirdigimiz olay resmin gölgesidir, daha dogrusu White secilirse,
    herhangi bir gölgelendirme kullanılmayacagını belirtmis olursunuz.


    Dikkat edilmesi gereken bir baska önemli husus, bu sefer DrawString metodunu degil de Draw metodunu kullandık.

     

     

    Bir sonraki makalemde SpriteSheet kullanarak animasyon olusturmaya ve Gesture kullanımına deginecegim, tesekkürler.

     

    Bu doküman, Microsoft Student Partner programına secilen ögrenciler ve Tahribat.Com adına Andrei tarafından yazılmıstır. İsim belirtmeden sagda solda yayınlayanlara 2 satır kod yazmak nasip olmasın.

    PDF linki :  https://hotfile.com/dl/183502199/cd92d8f/Windows_Phone_ve_XNA_4.0.pdf.html

     


    %40 indirimli olarak "Centos Sistem ve Sunucu Yönetimi" adlı kitabımızı satın alarak, Linux üzerine yapılacak olan devam projeleri icin destekte bulunabilirsiniz : http://www.hepsiburada.com/centos-sistem-ve-sunucu-yonetimi-oku-izle-dinle-ogren-p-KKODLAB01579
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    oldum olası bu oyun programlamadan uzak durmuşumdur ama iyi bilirsen seni iyi yerlere çıkartır. dökümanın için teşekkürler. visual studio da xna harici başka hangi frameworkları kullanabiliyoruz ? mesela directx ile c# da oyun yazabilir miyim ? 

    + konu dökümanlar kısmına taşınsa iyi olur. gerçi çok kişinin ilgisini çekeceğini sanmıyorum ama ciddi emeğin için teşekkürler tekrar.


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trampfd
    trampfd's avatar
    Kayıt Tarihi: 10/Mayıs/2006
    Erkek

    Faydalı, ilerki aşamalarda video anlatım yaparsan eğer daha da faydalı olabilirsin.


    Ehl-i Byte
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unix
    Andrei
    Andrei's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Aralık/2008
    Erkek
    unbalanced bunu yazdı

    oldum olası bu oyun programlamadan uzak durmuşumdur ama iyi bilirsen seni iyi yerlere çıkartır. dökümanın için teşekkürler. visual studio da xna harici başka hangi frameworkları kullanabiliyoruz ? mesela directx ile c# da oyun yazabilir miyim ? 

    + konu dökümanlar kısmına taşınsa iyi olur. gerçi çok kişinin ilgisini çekeceğini sanmıyorum ama ciddi emeğin için teşekkürler tekrar.

    tesekkürler hocam.

    evet directx kullanabilirsin c# ile. hatta windows phone 8'le beraber microsoft, mobil oyun yazılımcılıgı icin tekrar directx'e önem vermeye baslayacak diye biliyorum. yani wp8 ile birlikte directx desteklemeye basladı mobil platform.

    @trampfd

    tesekkürler. aynı seyi düsünüyorum bende lakin bazı sıkıntılar var su an, onları cözdügümde umarım.

    Andrei tarafından 11/Ara/12 00:05 tarihinde düzenlenmiştir

    %40 indirimli olarak "Centos Sistem ve Sunucu Yönetimi" adlı kitabımızı satın alarak, Linux üzerine yapılacak olan devam projeleri icin destekte bulunabilirsiniz : http://www.hepsiburada.com/centos-sistem-ve-sunucu-yonetimi-oku-izle-dinle-ogren-p-KKODLAB01579
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Homer
    Homer's avatar
    Kayıt Tarihi: 08/Temmuz/2007
    Erkek

    saolsın hocam

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    esinti
    esinti's avatar
    Kayıt Tarihi: 27/Ağustos/2015
    Erkek
    bana bir kod ogretenin Allah duasini kabul etsin :)
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    müstakar
    yarasaadam
    yarasaadam's avatar
    Kayıt Tarihi: 02/Haziran/2011
    Erkek

    kardeşim  eline sağlık  xna konuusnda videolu anlatım sağlanırsa harika olur 


    Beyninizi işlemci olarak kullanın , harddisk olarak değil :) İnsanlar kitap gibidir azizim , önemli olan cildi değil, içerikleridir Tüm ağı çökertmek , bir insanı hacklemekle başlar
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    efecan123
    efecan123's avatar
    Kayıt Tarihi: 20/Ağustos/2010
    Erkek

    ellerine sağlık hocam bu aralar bu konu çok ilgimi çekmekteydi çok faydalı oldu


    Benim evim valizimdir. http://efecetir.info
Toplam Hit: 1679 Toplam Mesaj: 8