13 Ocak 2009 Salı

XNA’ de Modelin Hareketini Yönetmek

Modelin nasıl hareket ettiğinden bahsetmiştim ama çoğumuzun aklına bu modelin hareketi kendiliğinden oluyor. Oyuncu modeli hareket ettirmek istediğinde bunu kod olarak nasıl yapacağımız sorusu gelebilir. Bu sorunun cevabını yine Update metoduna ekleyteceğimiz satırlarda bulacağız. Unutmamız gereken önemli husulardan biride Game1.cs sınıfı içindeki metotların kullanımıdır. LoadContent metodu oyu ilk çalıştırıldığında gerekli yüklemeleri yapar ve sadece bir kere çağrılır. Draw ve Update metotları ise FPS değeri kadar çağrılır.

Şimdi ekleyeceğimiz satırlarla modelimiz sağa, sola, yukarı ve aşağı yönlerine kullanıcın verdiği talimatlarla hareket ediyor. Modelimiz sağ ok ile sağa, sol ok ile sola,...., hareket etmektedir.

Tanımlamamız gereken iki adet float tipinde değişken bulunmaktadır. Bunlardan forpozitionX değişkeni modelin X ekseninde hareketini sağlamak için tanımlanmıştır. Sağa ya da sola gitmesini sağlar. forpozitionY değişkeni ise modelin Y ekseninde aşağıya da yukarıya hareketini sağlamak için tanımlanmıştır.

if (keyboardState.IsKeyDown(Keys.Left): sol yönü belirten oka basılıp basılmadığını kontrol eder.

Eğer bu oka basıldıysa modelin hareketi sola olmalıdır. Bu durumda forpozitionX değişkeninin değeri azaltılır. Ben kullandığım modelin boyutuna uygun olsun diye 5.0f kullandım siz bu değeri modelinize uygun oalrak ayarlayabilirsiniz. Dikkat etmemiz gereken bu değerin 0.0f ve bunun altına düşmemisidir. Bu nedenle azaltma işleminden önce bu değişkenin değeri kontrol edilir.

if (keyboardState.IsKeyDown(Keys.Right)): sağ yönü belirten oka basılıp basılmadığını kontrol eder.

Bu oka basıldıysa modelin hareketi sağa olmalıdır. Bu durumda forpozitionX değişkeninin değeri arttırılır.

if (keyboardState.IsKeyDown(Keys.Up)): yukarı yönü belirten oka basılıp basılmadığını kontrol eder.

Eğer bu oka basıldıysa modelin hareketi yukarı olmalıdır. Bu durumda forpozitionY değişkeninin değeri arttırılır.

if (keyboardState.IsKeyDown(Keys.Down)): aşağı yönü belirten oka basılıp basılmadığını kontrol eder.

Eğer aşağıya hareketi sağlayan oka basıldıysa modelin hareketi aşağıya olmalıdır. Bu durumda forpozitionY değişkeninin değeri azaltılır. Ancak bu değerin 0.0f ve bunun altına düşmemisi gerekir. Bu nedenle azaltma işleminden önce bu değişkenin değeri kontrol edilir.


float forpozitionX = 0.0f;
float forpozitionY = 0.0f;



protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();

// TODO: Add your update logic here
//modeli hareket ettiren kodlar
KeyboardState keyboardState = Keyboard.GetState();
if (keyboardState.IsKeyDown(Keys.Left))
{
if(forpozitionX>5.0f)
forpozitionX -= 5.0f;
modelPosition = new Vector3(forpozitionX, forpozitionY, 0.0f);
}
if (keyboardState.IsKeyDown(Keys.Right))
{
forpozitionX += 5.0f;
modelPosition = new Vector3(forpozitionX, forpozitionY, 0.0f);
}
if (keyboardState.IsKeyDown(Keys.Up))
{
forpozitionY += 5.0f;
modelPosition = new Vector3(forpozitionX, forpozitionY, 0.0f);
}
if (keyboardState.IsKeyDown(Keys.Down))
{
if(forpozitionY>5.0f)
forpozitionY -= 5.0f;
modelPosition = new Vector3(forpozitionX, forpozitionY, 0.0f);
}
base.Update(gameTime);
}

Hiç yorum yok: