Yandex.Metrica
XNA'de Klavye

Merhaba arkadaşlar bu yazımızda en son kaldığımız yer olan XNA de hareket konusundan devam edeceğiz.Bu kısımda herhangi bir bilgisayar oyununun en önemli kısımlarından olan kullanıcı yönetimini veya kontrolünü anlatacağız.XNA kütüphanesinin bize sunduğu sınıflarla kullanıcı, klavyesinden oyun içi karakterini bizim belirlediğimiz tuşlara basarak kontrol altına alacak.Örneğin ekranda çizdirdiğimiz sprite örneğimize kullanıcının dilediği yönde hareket edebileceği tuş ayarlarını atayarak işlemimizi gerçekleştirelim.

Öncelikle daha önce üzerinde konuştuğumuz bir konuya değinmek istiyorum. Daha önceki yazılarımızda Game1 sınıfı içerisinde gelen fonksiyonlara giriş yapmıştık. Bizim şu an amacımız klavyeden girdi alıp buna göre gerekli ayarlamaları(hareket vb.) halletmemiz gerekiyor.Klavye ile ilgili sorunlarımızı XNA kütüphanesi sınıfları çözüyor. Bizim için önemli olan bu işlemi nerede yapacağımız. Hatırlayacağımız gibi Update ve Draw fonksiyonları oyun programımız yürütüldüğü sürece sürekli olarak işleyen metotlardı.Update metotu gerekli güncellemelerin,kontrollerin yapıldığı yer olması sebebiyle klavye ile ilgili işlemlerimizi gerçekleştirmemiz açısından doğru konumdur.

Örneğimizde sprite ımızın 2 piksel sağa,sola,yukarı veya aşağı hareket edebilmesini istiyorum.Bununla ilgili gerekli ayarlamayı Update fonksiyonu içerisinde gerçekleştiriyorum.

        protected override void Update(GameTime gameTime)
        {
            KeyboardState klavye = Keyboard.GetState();

            if (klavye.IsKeyDown(Keys.Up)) 
            {
                this.position.Y -= 2;
            }
   ..............................

Yukarıda KeyboarState sınıfından klavye değişkeni oluşturdum.Buna KeyboardState sınıfı gibi XNA Framework ün sağladığı(1) Keyboard sınıfını kullanarak programın yürütüldüğü bilgisayarın klavyesiyle ilgili durumları aktarıyorum.Bu aşamadan sonra klavyemizde herhangi bir tuşa basılmış mı gibisinden soruları sorgu bloklarımızda soruyoruz.Buna göre örneğimizde kullanıcı yukarı ok tuşuna bastığında sprite ımızın Y eksenindeki konumu 2 piksel azalacak yani cismimiz ekranda yukarı hareket edecektir.Şimdi kodumuzun tam halini hep birlikte inceleyelim.

using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace WindowsGame3
{
   ///
   /// This is the main type for your game
   ///
   public class Game1 : Microsoft.Xna.Framework.Game
   {
       GraphicsDeviceManager graphics;
       SpriteBatch spriteBatch;
       Vector2 position;
       Texture2D doku;
       
       public Game1()
       {
           graphics = new GraphicsDeviceManager(this);
           Content.RootDirectory = "Content";
       }
       protected override void Initialize()
       {
           base.Initialize();
       }
       protected override void LoadContent()
       {
           spriteBatch = new SpriteBatch(GraphicsDevice);
           doku = Content.Load("denizanasi");
           position = new Vector2(0,0);
       }
       protected override void UnloadContent()
       {
          
       }
       protected override void Update(GameTime gameTime)
       {
           if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
               this.Exit();
           KeyboardState klavye = Keyboard.GetState();
           if (klavye.IsKeyDown(Keys.Up)) 
           {
               this.position.Y -= 2;
           }
           if (klavye.IsKeyDown(Keys.Down))
           {
               this.position.Y += 2;
           }
           if (klavye.IsKeyDown(Keys.Right))
           {
               this.position.X += 2;
           }
           if (klavye.IsKeyDown(Keys.Left))
           {
               this.position.X -= 2;
           }
           base.Update(gameTime);
       }
      
       protected override void Draw(GameTime gameTime)
       {
           GraphicsDevice.Clear(Color.CornflowerBlue);
           
           spriteBatch.Begin();
           spriteBatch.Draw(doku,position,Color.White);
           spriteBatch.End();
           
           base.Draw(gameTime);
       }
   }
}


(1)Kodunuza Microsoft.Xna.Framework.Input alan adını eklemelisiniz

Comments(0):
Bu yazı için henüz bir yorum yapılmamış
Yorum yapabilmeniz için üye olmanız gerekmektedir,(Giriş Yap|| Üye Ol)