

Windows Phone Mango Ve XNA 4.0 İle Oyun Programlamaya Giriş [Doküman]
-
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
-
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.
-
Faydalı, ilerki aşamalarda video anlatım yaparsan eğer daha da faydalı olabilirsin.
-
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 -
saolsın hocam
-
bana bir kod ogretenin Allah duasini kabul etsin :)
-
kardeşim eline sağlık xna konuusnda videolu anlatım sağlanırsa harika olur
-
ellerine sağlık hocam bu aralar bu konu çok ilgimi çekmekteydi çok faydalı oldu