XNA ile başlangıç yapmak için, Visual Studio’larımızı açıyoruz ve yeni bir Windows Game projesi oluşturuyoruz.Solution Explorer’a baktığımızda, proje içindeki dosyaları görüyoruz.http://www.enginpolat.comXNA Oyununu çalıştırdığımızda, başlangıç noktası olarak Program.cs‘deki Program class’ının static void Main() methodu çalıştırılır.Main() method’unun yaptığı iş basittir;static void Main(string[] args){using (GameLoop game = new GameLoop()){game.Run();}}
GameLoop class’ından instance oluşturup, Run() method’unu çağırır.GameLoop class’ına bakarsak;public class GameLoop : Microsoft.Xna.Framework.Game{GraphicsDeviceManager graphics;SpriteBatch spriteBatch;public GameLoop(){graphics = new GraphicsDeviceManager(this);Content.RootDirectory = “Content”;}protected override void Initialize(){base.Initialize();}protected override void LoadContent(){spriteBatch = new SpriteBatch(GraphicsDevice);}protected override void UnloadContent(){}protected override void Update(GameTime gameTime){if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)this.Exit();base.Update(gameTime);}protected override void Draw(GameTime gameTime){GraphicsDevice.Clear(Color.CornflowerBlue);base.Draw(gameTime);}}
LoadContent() method’u oyunda kullanacağımız grafikleri – sesleri – vs. hafızaya yüklediğimiz yerdir.UnloadContent() method’u ise, LoadContent() method’unda yüklediğimiz kaynakları hafızadan sildiğimiz yerdir.Oyun çalıştığı zaman LoadContent() method’u bir defa çalıştırılır. Oyun’dan çıkılırken de UnloadContent() method’u bir defa çalıştırılır.Update() method’u, ekrana çizilecek nesnelerin, konum-boy-saydamlık-vs. değerlerinin hesaplandığı yerdir.Draw() method’u ise, nesnelerin ekrana çizim işlemlerinin gerçekleştirildiği yerdir..Net Framework sabit olarak saniyede 60 kare çizim yapmayı hedefler. Update() ve Draw() method’larının saniyede 60 kere çalıştırılmasını beklemeliyiz.İlk oyun ekranımız için, şu görselleri bilgisayarımıza kopyalayalım;http://www.enginpolat.comhttp://www.enginpolat.comSolution Explorer‘da Content üzerine sağ tuşla tıklayarak ari.png ve fil.png dosyalarını projeye ekleyelim.GameLoop.cs dosyamızda class seviyesinde Texture2D tipinde iki değişken oluşturalım;Texture2D ArkaPlan;Texture2D Ari;
Daha sonra bu değişkenlere resimleri yükleyeceğiz. Aynı yere bir tane de Rectangle tipinde değişken oluşturalım.Rectangle OyunPencere;
Bu değişkene ekranımızın boyutlarını yüklüyor olacağız.LoadContent() method’unda bu değişkenlerin değerlerini atayalım;OyunPencere = new Rectangle(0, 0, graphics.GraphicsDevice.Viewport.Width, graphics.GraphicsDevice.Viewport.Height);ArkaPlan = Content.Load(“fil”);Ari = Content.Load(“ari”);
GameLoop class’ının constructor‘ında oyunumuzun başlığını değiştirebiliriz;public GameLoop(){this.Window.Title = “XNA – Oyun Temelleri”;graphics = new GraphicsDeviceManager(this);Content.RootDirectory = “Content”;}
Draw() method’unda resimlerin ekrana çizim işlerini yapacağız. Çizime işlemlerini Begin() ve End() methodları arasında yapmamız gerekiyor;spriteBatch.Begin(SpriteBlendMode.AlphaBlend);spriteBatch.Draw(ArkaPlan, OyunPencere, Color.White);spriteBatch.Draw(Ari, Vector2D.Zero, Color.White);spriteBatch.End();
Bu durumda uygulamayı çalıştırırsak, karşımıza şöyle bir ekran gelir;http://www.enginpolat.comŞimdi arı resmini, klavye tuşlarını kullanarak ekranda hareket ettirelim. Öncelikle arı’nın ekrandaki konumunu tutan bir değişkene ihtiyacımız var, class seviyesindeki değişkenlere ekleyelim;Vector2 Location = Vector2.Zero;
Draw() methodunda ari resmini çizdiğimiz satırı güncelleyelim;spriteBatch.Draw(Ari, Location, Color.White);
Son olarak Update() method’umuzu güncelleyelim;protected override void Update(GameTime gameTime){KeyboardState ks = Keyboard.GetState();if (ks.IsKeyDown(Keys.Escape))this.Exit();if (ks.IsKeyDown(Keys.Up))Location.Y -= 3;if (ks.IsKeyDown(Keys.Down))Location.Y += 3;if (ks.IsKeyDown(Keys.Left))Location.X -= 3;if (ks.IsKeyDown(Keys.Right))Location.X += 3;base.Update(gameTime);}
Gördüğünüz gibi, klavyede o anda basılı tuşları Keyboard.GetState() ile ks değişkenine yüklüyoruz, sonra basit karşılaştırmalar ile Location değişkenimizin X ve Y değerlerini değiştiriyoruz.Draw() method’unda ari’yi çizeceğimiz yer olarak Location değişkenini verdiğimiz için, klavyeyi kullanarak ari’yi hareket ettirebildiğimizi görüyoruz.http://www.enginpolat.comOyunun kaynak kodlarını buradan indirebilirsiniz.