Yandex.Metrica
XNA'de 2D Hareket
Bir önceki yazımızda XNA framework sayesinde elimizdeki sprite örneğinin oyunumuza kolay bir şekilde eklenebileceğini görmüştük.
Şimdi görüntülediğimiz sprite ımıza biraz hareket kazandıralım.
XNA kütüphanesi ile gelen SpriteBatch sınıfı nesnemizin ekrana çiziminde kullandığımız Draw metodunu hatırlayalım.

spriteBatch.Draw(Texture2D texture,Vector2 position,Color color);

Burada gördüğümüz gibi Draw fonksiyonunun aldığı üç parametreden hareketle ilgili olanı position dır.Vector2 sınıfından olan position değişkeni hatırlayacaksınız ekrana çizdireceğimiz sprite ın konumuyla ilgili bilgiyi tutuyordu.Şimdi en basitinden şöyle düşünürsek eğer biz position ı durumlara bağlı olarak değişebilen bir yapıya kavuşturursak sprite ımızı hareket ettirme amacımıza ulaşmış oluruz.Bununla kastettiğim position değişkenini
Game1 sınıfımız içerisinde tanımlayarak Update metotu içerisinde takibe alırız.Eğer position değişkeni klavye,mouse ile veya herhangi bir olay sonucu değişiyorsa bununla ilgili değişimleri Update metotu içerisinde nesnemize uygulayabiliriz.


Öncelikle bir konum nesnesi tanımlıyoruz.

Vector2 position;


protected override void LoadContent()
        {
            position = new Vector2(0,0);
        }

Bu metot içerisinde position isimli nesnemizi oluşturup başlangıç koordinatları olarak sıfıra sıfır olarak giriyorum.

Vector2 sınıfı nesneleri iki boyutta işlemler yaparken koordinat sisteminde nokta tanımlamamıza yararlar.Onun için bu noktanın X ve Y eksenleri konum bilgisi önemlidir.Başlangıç olarak sıfıra sıfır olarak atadığımız position değişkeninin örneğin position.X++; ile X ekseninde ekranın sağına doğru veya position.Y++; ile Y ekseninde ekranın tabanına doğru hareketini sağlayabiliriz.Tabi burada artış veya azalış hızı bize kalmış olup sprite ımıza ekran üzerinde piksel olarak hareket kazandırır.

protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

// X ekseninde 4 piksel artış hareketi,Y ekseninde bir değişim olmaz(Cisim yukarı veya aşağı hareket etmez)
        //    position.X+=4;
// Hem X hem Y ekseninde artış meydana geleceğinden cismimiz çapraz hareket yapacaktır
// position.X++ ; position.Y++ ;

            base.Update(gameTime);
        }

Son olarakta cismimizi çizdirme işlemine geliyoruz.

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            
            spriteBatch.Begin();
            spriteBatch.Draw(doku,position,Color.White);
            spriteBatch.End();
            
            base.Draw(gameTime);
        }

Şimdi bütün olarak Game1 sınıfımıza göz atalım,

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();

            position.X++; position.Y++;
            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);
        }
    }
}



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