17 Eylül 2011 Cumartesi

XNA Race Game

Oyun projem için bir Facebook sayfası hazırladım buradan bakabilirsiniz.


Yakında oyunda kullandığım teknolojiler hakkında blog yazmaya başlayacağım. Özellikle işleyeceğim konu başlıkları şöyle:

Temel
  • XNA 4.0 ile temel bir proje nasıl oluşturulur
  • Yardımcı sınıflar (RandomHelper, InputController)
  • Temel lineer cebir ve oyundaki uygulamaları*
  • Oyuna içerik eklemek (2D Texture, 3D Model, Effect, Sound)
  • Modelleri sınıflar ile temsil etmek (ModelManager, StaticModel, AnimatedModel, SkinnedModel)
  • Kamera, ışıklandırma ve özel efektler (HLSL) *
  • 2D ve 3D birlikte çizdirme ve 2D textureları 3D ortamda çizdirmek (Billboard Effects)
  • Yer şekilleri oluşturma (Terrain Generation)*
  • 2D Animasyon*
  • 3D Animasyon
  • 3D Ses*
Extra
  • Screenshot capturing
  • 3D Studio Max'ten XNA 4.0 için model çıkartma
  • XNA 4.0 için kurulum projesi
  • Tasarım şablonlarının oyundaki kullanımlarının listesi
  • Geliştirme boyunca karşıma çıkan sorunlar ve çözümleri
* Bu konular hakkında ayrıca çalışma yapmadan yayın yapmayacağım

14 Eylül 2011 Çarşamba

Açık Kaynaklı 3B Oyun Projesi Hakkında

Son zamanlarda oyunumu açamayanların sayısı artınca söylemeyi unuttuğumu farkettim:

Oyunum XNA 4.0 Framework kullandığı için ilk önce bu framework'ü kurmanız gerekli.
Buradan indirebilirsiniz.

XNA 4.0 Framework de .NET Framework 4.0 kullandığı için ilk olarak onu kurmanız gerekli. Onu da buradan indirebilirsiniz.

13 Eylül 2011 Salı

Decorator Pattern (Bezeme Şablonu)


Tür: Yapısal Şablon
Diğer Adı: Sarmalayıcı (Wrapper)

Adında anlaşılacağı gibi bezeme şablonu ilişkilendirildiği (bu manada Ingilizce 'attach' fiili kullanılır) sınıfı dinamik olarak dekore eder. Bezeme şablonuna ayrıca sarmalıyıcı (Wrapper) da denir. Bu isimle daha çok karşılaşmak mümkündür çünkü C# dilinin kendi içinde doğal türlerin (int, float, double gibi) birer Wrapper sınıfları bulunur. Buradaki konsept her ne kadar farklı da olsa gerçek hayatta bir şablonun zaten tek ve nihayi bir hali yoktur.

Bezeme şablonuna alternatif olarak sınıf türetme düşünülebilir. Fakat bu durumda bir sınıfın alacağı durum önceden belirlenmiş (statik olarak) ve sınırlandırılmış olur. Bu genellikle karşılaşılan bir durumdur fakat bazı durumlar vardır ki dinamik olarak bezemek daha çok işimize gelebilir. Örneğin bir sınıfımıza ekleyebileceğimiz n tane yeteneğimiz (capability) olsun. Bu yeteneklerin bir yada bir kaçını destekleyen alt sınıflar elde etmek istersek n'in bütün kombinasyonlarını toplamamız gerekir. Fakat bu işi bezeme sınıfları ile yaparsak sadece n tane bezeme sınıfını türetmek yeterli olur.

Bezeme şablonu oldukça sık karşılaşılan bir şablondur. Son zamanlarda moda olan AOP (Aspect Oriented Programming) özellikle bezeme şablonu üzerine bina olmuştur. AOP'ta Interceptor denilen nesneler kendisi için özel olarak bezenmiş sınıflara sonradan raporlama gibi iş hayatında önemli özellikler katabilir.

Bezeme şablonu en çok katmanlı yapılarda kullanılır. Her sınıf bir katman teşkil eder. Katmanlı yapılara da en iyi örnek görsel uygulamalardır (GUI App - Graphic User Interface Application). İlk önce boş ekranı temsil eden bir sınıf olur. Bu sınıf bile tek başına görüntü oluşturabilir. Fakat çeşitli kütüphanelerde (.NET, Java Swift, Qt gibi) farklı olmakla birlikte çok benzer katmanlı görsel sınıflar vardır. Bu sınıflar hepsi aynı sınıftan türerler. Hepsinin kendini çizdirme metodları vardır. İstenilen çizdirme özelliği için var olan görsel nesne bu yeteneği temsil eden sınıf tarafından sarmalanır.


Burada GoF'un meşhur kitabı olan "Design Patterns: Elements of Reusable Object Oriented Software"dan alıntı. Burada görsel olarak katmanlamanın nasıl yapıldığı ve sonucun neye dönüştüğü gösterilmiştir. Aşağıda da bu yapının sınıf çizelgesi de vardır.


Burada VisualComponent ana sınıfımızdır. Genellikle soyut sınıf (abstract class) olur. TextView sınıfı sadece verilen yazıyı göstermekle yükümlüdür. Diğer Decorator'dan türeyen ScrollDecorator ve BorderDecorator sınıfları TextView sınıfını isteğe bağlı olarak bezer. İster biri, ikisi yada hiçbiri kullanılmayabilir.

6 Eylül 2011 Salı

Açık Kaynak Kodlu Oyun Projesi

Bugün itibariyle 2 haftadır uğraştığım XNA tabanlı 3B yarış simulasyonumu Google Code ile yayınlamış bulunuyorum. Projeme buradan erişiblirsiniz. Ayrıca ilerleyen zamanlarda projede kullandığım irili ufaklı teknolojileri (middle-ware) de açıklayacağım.

1 Eylül 2011 Perşembe

iPhone 4 Home Düğmesi Problemi

Eğer iPhone 4'ünüzün home düğmesi bir anda basmamaya başlarsa (ki daha alalı 3 ay olmasına rağmen) çözüm çok basit:
Elinize bir diş fırçası alın ve iPhone 4'ünüzün home düğmesini sertçe fırçalayın. Çıkan tozlara inanamayacaksınız. :)

edit: Eğer servise gidilse bile ilk yapacakları şey "hard restart" denilen işlemdir ki bu muhtemelen işe yaramaz. Bu da olmazsa "restore" işlemi yapacaklardır. Bu işlemde uzun sürer çünkü tüm bilgilerin ilk önce yedeklenmesi ve tekrar geri yüklenmesi gerekecektir. Bu işlemler toplamda saatler sürebilir. Bu yöntemler eğer problem yazılımsal ise ancak işe yarar ki bu düğme problemi tamamen mekanik kirlenmeyle ilgilidir ve bu fırçalama çözümü bir servise ihtiyaç duymadan halledilir.