Yazýlarýmý Daha Kolay Takip Etmek Ýçin Týklayýn!

YENİ KİTAP YENİ HEYECAN

yazan: 8/8/2008 6:52:00 PM

Elime yeni bir kitap geçti, "Begining XNA from novice to professional", bu güne kadar, Mehmet Tunçkanat'ın hediye ettiği kitaptan başka hep internetteki bloglardan ve creators.xna.com'dan idare ediyordum. Çoğunlukla aradığımı bulabilmeme karşın iyi bir kitabın etkisi hiç bir şeyde yok. Bu kitabın da aslında ilk bölümleri bildiğim şeyler ama ikinci bölümü hoşuma gitti 3 boyutlu bir FPS oyunu yapmayı anlatıyor, bildiğiniz gibi ben RPG oyunu yapmak istiyorum ama, 3D olayına geçmek için mükemmel bir fırsattı. Ve malum buradaki berbat internet bağlantımı da göz önüne alırsak bu kitap ilaç gibi geldi. Bu hafta bu kitabı bitirmek istiyorum, ve deneyimlerimi paylaşmak için sabırsızlanıyorum.

Aslında bloga başlarken .net ve .netcf özellikli bir blog yazmayı düşünüyordum ama XNA tüm isteklerimi alt üst etti. Çok eğleniyorum XNA üzerinde çalışırken çoğu zaman dışarı çıkma isteğime baskın geldiği de oluyor. Gerçi yarın İsla Magicka'ya gideceğiz Smileama olsun. Umarım bu sene içinde XNA konusunda uzmanlaşmış ve kendi oyunlarımı yapmaya başlamış olurum. Okuldan da bir kaç ekip arkadaşı kafaladım mı tamamWink. Eh bazılarınız büyük oynadığımı düşünüyor olabilir çoğunuza boş hayaller olarak da geliyor olabilir ama uyarıyorum pek çoğu Imagine Cup'a başlarken de böyle demişti. Eğer isterse insanın başaramayacağı şey yok. Mikail'in de hep söylediği gibi "Eğer herhangi bir insan dünya üzerinde bir şeyi başarabiliyorsa, diğer insanlar da bunu başarabilir demektir." Kesinlikle böyle ne yani oyun yazanlar yazmış, uzmanlaşıp kitap yazanlar olmuş benim neyim eksik!! Neyse biraz daha devam edersem megaloman olduğum düşünülecek en iyisi burada keseyim. Kendinize iyi bakın.

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

Genel

Bloga Fırsat Kalmıyor

yazan: 8/7/2008 6:42:00 PM

Eh malum burda işti güçtü vb... bloga pek zaman kalmıyor, bi de üstüne üstlük XNA'ye sarmış durumdayım, kitap falan okuyorum bloga ayıracak vakit kalmıyor. Bir de üstüne üstlük internet bağlantım berbat burada - Jose en yakın zamanda haledecek bu sorunu- . Yani özetle pek blog yazmaya vakit kalmıyor. Ama bir listem var ve boş zaman buldukça sırayla o konuları yazcağım. Ya da sırayı önemsemem ne isterse canım onu yazarım her zaman olduğu gibiSmile... Bu arada iş demişken bir şirket için test yazılımı geliştiriyoruz, eh burada bahsedemeyeceğim içeriğinden ama hoş bir şey oluyor.

Neyse ben işime döneyim. 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

Genel

XNA’de İKİ BOYUTLU NESNE ÇİZİMİ – 3

yazan: 8/2/2008 4:40:00 AM

Önceki yazımda sabit duran nesneleri çizdirmeyi göstermiştim. Bu yazımda da aynı sınıfları kullanarak hareketli bir nesne çizdirmeyi göreceğiz.

 

Öncelikle nesnemiz hareket edeceği için bir hareket hızı olması lazım; bunu CizilecekNesne sınıfımıza değişken olarak ekliyoruz.

            public Vector2 velocity;

daha sonra; Game1.cs sınıfımıza dönelim;

nesne.velocity = new Vector2(0.0f, 0.5f);

nesne.position = new Vector2(350, 250);

bu şekilde sadece yukarı yönlü bir hız vektörü belirleyelim, ve nesnemiz için bir pozisyon değeri atayalım.

Daha sonra klavyeden girdi alarak nesnemize hareket verelim.

if (keyboardState.IsKeyDown(Keys.Up))

            obje.position -= obje.velocity;

      if (keyboardState.IsKeyDown(Keys.Down))

            obje.position += obje.velocity;

şeklinde daha önce de anlattığım gibi, kullanıcı girdisi alarak nesneyi gideceği yöne doğru hareket ettirelim. Birinci deyimde -= işareti yukarı yönlü bir harekete neden olcaktır çünkü unutmayalım ekranımızda y ekseni aşağı gittikçe artar. Sonra;

 

obje.position.Y = MathHelper.Clamp(obje.position.Y,

 0, ekranAlanı.Height-obje.sprite.Height);

 

Diyelim, bu metoda dikkat Clamp metodu birinci parametresinde verilen değeri alır; ikinci ve üçüncü parametreler arasında tutar. Eğer değer son iki parametrenin arasında ise değişmez, eğer birini geçiyorsa geçtiği max veya minimum değere eşitlenir.

Burada nesnemizin Y bileşeni ancak “0” ve  “Ekran alanı – Nesnenin boyu” arasında bir değer alabilir. Eğer birini geçerse geçtiği değere eşitlenir. Böylece nesnemiz sürekli ekranda kalacaktır.

 

Olay kısaca bu zaten diğer kısmını önceki yazıda halletmiştik şimdi araya bunları ekleyerek nesnemizi harekete geçirdik.

Önceki yazıya buradan; çevre birimlerinden girdi almaya buradan ulaşabilirsiniz.  

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: , , ,

XNA

XNA’de İKİ BOYUTLU NESNE ÇİZİMİ – 2

yazan: 8/1/2008 8:25:00 AM

 

 Önceki yazımda nesnelerimizi oyun ekranında 2B olarak temsil etmek için gerekli olabilecek bazı metotlardan bahsetmiştim. Bu yazımda da bu metotları kullanarak ekranda bir temsil oluşturmayı anlatmaya çalışacağım.

Öncelikle işin mantığını sıralayalım:

1-     Nesnelerimizin ihtiycı doğrultusunda sınıflar hazırlıyoruz; örneğin durağan bir nesne için konum ve desen gibi iki değişken yeterli olabilecekken; hareket eden bir nesne için hız, yön, hareketin başlama konumu gibi özelliklere ihtiyaç duyarız.

2-     Sınıflarımızın yapıcı metotlarında (Constructor) değişkenlerimizi ayarladık,

3-     Game1.cs’de nesnemizi temsil edecek değişkenler oluşturduk.

4-     LoadContent() metodu içinde nesnemize başlangıç değerlerini yükledik.

5-     Update() metodu içinde, nesnemizin etkileşimini sağlayacak işlemleri yaptık. Gerektiğinde if deyimleri ile nesnemize yeni tepkiler verdirdik. Bu metot saniyede 50-60(değişebilir) kez tekrarlanacak buna dikkat ettik.

6-     Draw() metodunda spritebatch nesnesinin metotlarıyla çizim işlemini gerçekleştirdik. Bu da Update metodu gibi saniyede onlarca kez tekrarlanacak.

Not: XNA GS’nin bize hazırladığı metotların içini doldurmak yerine ufak metotlar tanımlayarak bu kısımların içinde çağırırsak daha bir güzel olur kodumuz ama bu yazıda buna dikkat etmeyeceğim, siz edin.

Bu yazımın konusu olarak hareketsiz nesneleri çizmeyi seçtiğim için ekranda haket etmeyen bir nesne çizeceğiz. Daha sonra hareket eden nesnenin nasıl çizileceğini ve kullanıcı girişinden nasıl etkileneceğini yazacağım.

Şimdi yavaş yavaş başlayalım;

1. Adım:

CizilecekNesne.cs:

        public Texture2D deseni;

        public Vector2 konumu;

şeklinde bazı nesne özellikleri tanımladık.

2. Adım:

CizilecekNesne.cs:

        public CizilecekNesne (Texture2D yüklüDesen)

        {

            konumu = Vector2.Zero;

            deseni = yüklüDesen;

        }

3. Adım:

            Game1.cs

               //arkaplanımız için bu değişkeni tanımladık.

        Texture2D arkaPlan;

         //bu değişken de oyunun ekran alanını tutacak.

        Rectangle ekranAlanı;

        //nesnemiz

        GameObject nesne;

4. Adım:

            Game1.cs – LoadContent methodu:

            arkaPlan = Content.Load<Texture2D>("arkaplan");

            //bunun için önceden Content klasörüne bu isimle bir resim koymuş

//olmamız gerekir

 

 

nesne = new CizilecekNesne(Content.Load<Texture2D> ("nesneFoto"));

nesne.konumu = new Vector2(

graphics.GraphicsDevice.Viewport.Width/2,

graphics.GraphicsDevice.Viewport.Height/2);

           

            ekranAlanı = new Rectangle(0, 0,

                graphics.GraphicsDevice.Viewport.Width,

                graphics.GraphicsDevice.Viewport.Height);

           

 burada arkaplanımızı nesnemizi ve ekran alanımızın temsillerini hazırladık.

5. Adım:

            Game1.cs – Draw metodu:

            spriteBatch.Begin(SpriteBlendMode.AlphaBlend);

      spriteBatch.Draw(arkaPlan, ekranAlanı, Color.White);

/* ekran alanı büyüklüğünde, arkaPlan desenine sahip bir resmi beyaz ışıkla döşedik. Dolayısıyla bu bizim arkaPlanımız oldu.*/

 

      spriteBatch.Draw(nesne.deseni, nesne.konumu, Color.White);

      // Burada da nesnemizi ekrana çizdirmiş olduk.

            spriteBatch.End();

 

Böylelikle ekrana nasıl arkaplan deseni verileceğine ve bir nesnenin nasıl çizdirileceğini görmüş olduk. İlerki yazılarımda hareketli bir nesnenin çizimini ve hareket ettirilmesini, çarpışmaları anlatmaya çalışacağım. Ama herşey buradaki gibi basit, değişken tanımla, LoadContent metodunda gerekli şeyleri yükle, Draw metodunda çiz. Eğer hareket veya etkileşim söz konusu ise nasıl davranacağına Update metodunda karar ver.

Sonraki yazılarda görüşmek dileğiyle...

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: , ,

XNA

XNA’de İKİ BOYUTLU NESNE ÇİZİMİ - 1

yazan: 8/1/2008 6:50:00 AM

Her ne kadar 3B çalışıyor olduğum için 2B’ye fazla vakit ayıramasam da bu temel öğelere burda yer vermek istiyorum. Bu yazımda bazı gerekli sınıf ve metotları anlatacağım. Sonraki yazımda ise bunları nasıl kullanacağımızı göstereceğim.

 

Sınıflar:

Texture2D sınıfı: Ekrana koyacağımız nesneyi(örneğin bir top) temsil eden grafiğin (örneğin bir top resmi) saklandığı sınıftır.

 

Vector2 sınıfı: Hepimizin lise fiziğinden bildiği hani o okla temsil edilen, i ve j gibi iki bileşeni içeren vektördür. Burda farkında olmanız gereken şey şudur ki, ekranınızda başlangıç noktası (origin) sol üst köşedir ve y ekseni yani j bileşeni aşağı doğru artmaktadır. Koordinat düzlemini baş aşağı düşünelim yani.

 

SpriteBatch sınıfı: Nesnelerimizi temsil eden sprite’ların ekrana çizilmesini sağlayan sınıftır.

XNA Game studio zaten kendisi bize bu sınıftan nesneyi yaratır.

 

Rectangle sınıfı: Çok basit olarak; Sol üst köşesinin koordinatları ve boyutlarıyla bir dikdörtgeni temsil eder.

 

Metotlar:

Content.Load<>() metodu: ContentManager sınıfının nesnesi olan Content, ki bize XNA GS tarafından sağlanmıştır; nesnesinin metodudur.  < > işaretlerinin arasına bu metot ile yükleyeceğiniz içeriği (bir texture, bir font) temsil eden bir tip yazılmalı ve parametre olarak string tipinde varlığın (asset) adı verilmelidir. Örnek olarak XNA GS’nin bize sağladığı Content klasörünün içinde “arkaPlan.tga” isminde bir resmimiz olsun. Biz de bunu içerik klasöründen alarak oyuna yüklemek isteyelim; doğal olarak bu 2 boyutlu resmi temsil edecek sınıf Texture2D olacaktır.  Yani yazmamız gereken kod: 

Texture2D backgroundTexture;

Değişkenini tanımladıktan sonra;

            backgroundTexture = Content.Load<Texture2D>("arkaPlan");

olmalıdır.

 

spriteBatch.Begin() metodu:

Bize XNA GS tarafından tanımlanan spriteBatch nesnesinin metodudur. Daha önceden anlattığım Draw() metodunun içine yazılır ve çizim işleminin nasıl yapılacağı nesnelerin nasıl ele alınacağı hakkında grafik kartına bilgi verir.

Parametre olarak;

SpriteBlendMode cinsinden bir geçiştirme biçimi alır (overload 2). Geçiştirme, alfa (saydamlık) değerlerine göre üst üste gelen nesne dokularının(texture) birbiri üstüne çizilmesi işlemidir.

Örnek olarak:

      spriteBatch.Begin(SpriteBlendMode.AlphaBlend);

Burada saydamlık(alpha) değerlerine göre geçiştirme ve çizim işleri gerçekleştirilecektir.

Bazı durumlarda üst üste gelen nesneler sorun yaratacaktır, geçiştirme istediğiniz sırayla olmayacaktır. Bu gibi durumda sıraya göre geçiştirme yapmak için yine bu metodun (overload 3) ikinci parametresi olan SpriteSortMode’tan bir sıralama tipi seçilmelidir. Örneğin nesneleri arkadan öne sıralamak için:

spriteBatch.Begin(SpriteBlendMode.AlphaBlend,

 SpriteSortMode.BackToFront, SaveStateMode.None);

SaveStateMode burada bu etkinin hatırlanması anlamına gelecektir, None yerine SaveState dersek performans kaybına uğrarız.

 

spriteBatch.Draw() metodu: 6 tane overload’ı olan bu metodu parametre parametre anlatmak yerine kısaca bahsedeyim,  bir nesnemizin, Texture2D türünden desenini, bu desenin İçine çizileceği dikdörtgeni, pozisyonununu , desenin hangi ışıkla aydınlatılacağını …vb parametre alarak nesnemizin görsel temsilini çizdirir. Örnek olarak bir arkaplan için;

 

            spriteBatch.Draw(arkaPlan, gorulebilirEkran, Color.White);

Color.White burada beyaz ışığı temsil eder ki bu da herhangi bir renk değişimi olmamasını sağlar ama diğer renk değerlerini denerseniz, resmin üzerine renkli bir ışığın etki ettiğini göreceksiniz.

 

spriteBatch.DrawString() metodu: bu metot da font’u, yazılacak yazıyı(string), içine yazılacağı dikdörtgeni(yazıyı konumlandırmak için gerekli) ve yazının rengini parametre alarak ekrana yazının çizilmesini sağlar.

      spriteBatch.DrawString(font,

                "merhaba XNA",

                new Vector2(50.0f,100.0f),

                Color.Red);

font burada 

      font = Content.Load<SpriteFont>("Arial"); 

şeklinde tanımlanmış XML formundaki bir spriteFont dosyasının temsilidir.

Şimdilik bu kadar metot yeter sanıyorum; ama gerek bu metotlarla gerekse başka metotlarla ilgili sorununuz olursa iletişime geçmekten çekinmeyin.

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: , ,

XNA

 

Yazar Hakkýnda

Erçin YONTAR
Erçin Yontar
1986 yýlýnda Çorlu'da doðdu.Ýlk öðrenimini Ankara'da, ortaöðrenimini Eskiþehir'de gördü.
Çanakkale 18 Mart Üniversitesi Bilgisayar Mühendisliði Bölümü mezunu.
Yazýlým ile çok ilgili; Visual Studiosu daima açýk :) bunun sayesinde Imagine Cup 2008 Türkiye 3.sü ve bir çok proje geliþtiriyor.
Yazýlým dýþýnda : Frp hastasý, rock/metal dinliyor, organizasyon iþlerine merak sardý. Bunlarýn yanýnda o bir; 
MCTS (Microsoft Certified Technology Specialist)



MSP (Microsoft Student Partner)

Bana posta atýn Send mail

Favorilerine Ekle


Add to Technorati Favorites

 

Twitter - Ne Yapýyorum?

    Pages

      Recent comments

      Feragatname

      Burada yazan yazýlar ve içerdikleri fikirler yazarýna aittir. Baþkasýný ilgilendirmez. Yazýlarý kaynaðýný kopyaladýðýnýz yazýnýn içinde týklanabilir link halinde belirtmek þartý ile olduðu gibi kullanabilirsiniz. Bu kurallarý deðiþtirme hakkým saklýdýr. Yarýn bir gün benim yazým benim blogumdan baþka bir yerde olamaz dersem Kopyaladýðýnýz yazýyý da silmek zorundasýnýz. Bu iþe girþen kiþi bu koþullarý ve doðan yasal yükümlülükleri kabul etmiþ sayýlýr. Eyvallah diyen devam etsin.

      © Tüm haklarý saklýdýr.

      Giriþ