Cevaplar

2012-10-30T10:59:49+02:00

sağ köşede options kısmı yazılı ona tıklayarak istediğini yapabilirsin yad akendin yükleyebilirsin :))

0
2012-10-30T11:01:46+02:00

Öncelikle sınıf seviyesinde birkaç değişken/sabit (readonly, const) ile oyun penceremizin özelliklerini ayarlayalım;

  1 private const int PENCERE_GENISLIK = 800; 2 private const int PENCERE_YUKSEKLIK = 600; 3   4 private readonly Color PENCERE_ARKAPLAN = Color.Black;

Oyun sınıfının constructor‘ında ilgili sabitleri kullanalım;

  1 graphics.PreferredBackBufferWidth = PENCERE_GENISLIK; 2 graphics.PreferredBackBufferHeight = PENCERE_YUKSEKLIK;

Oyun projemize, Uzay ve Ucak isimli iki tane sınıf (class) ekleyelim. Böylece arkaplan’da kayacak uzay görseli ile ilgili işleri Uzay sınıfında, klavye ile yöneteceğimiz uçak ile ilgili işleri de Ucak sınıfında gerçekleştirebileceğiz.

Ucak.cs dosyasında yeralan Ucak sınıfının yapacağı işler çok basit;

  01 public class Ucak 02 { 03     public Vector2 Position; 04     public readonly Vector2 Size; 05   06     public Texture2D Texture { get; private set; } 07   08     public Ucak(Texture2D Texture) 09     { 10         this.Texture = Texture; 11         this.Size = new Vector2(Texture.Width, Texture.Height); 12     } 13 }

Uzay.cs dosyasında yeralan Uzay sınıfı ise, kendi Update() ve Draw() method’larına sahip olacak. Draw() method’unda sürekli arkaplan görselini kaydırarak oyun penceresine çizdirecek.

Bunu yapabilmek için, SpriteBatch sınıfından bir instance’a ihtiyaç duyacağız.

Uzay sınıfının constructor‘ında ihtiyacımız olacak SpriteBatch tipinden bir parametre alacak ve sınıf seviyesinde bir değişkende saklayacağız;

  01 public class Uzay 02 { 03     private readonly Texture2D _Texture; 04     private readonly Texture2D _TextureSecond; 05   06     private float _Position = 0f; 07   08     private readonly int _Width; 09   10     private readonly SpriteBatch _SpriteBatch; 11   12     public Uzay(Texture2D Texture, SpriteBatch SpriteBatch) 13     { 14         this._SpriteBatch = SpriteBatch; 15   16         this._Texture = Texture; 17         this._TextureSecond = Texture; 18   19         this._Width = _Texture.Width; 20   21         this._Position = 0; 22     } 23   24     public void Update() 25     { 26         _Position -= 0.5f; 27   28         if (_Position < -_Width) 29         { 30             _Position += _Width; 31         } 32     } 33   34     public void Draw() 35     { 36         _SpriteBatch.Draw(_Texture, new Vector2(_Position, 0), Color.White); 37         _SpriteBatch.Draw(_TextureSecond, new Vector2(_Position + _Width, 0), Color.White); 38     } 39 }

Uzay sınıfının Update() method'unda, arkaplan görselini sürekli 0.5 birim sola kaydırıyoruz.

Not : Arkaplan görseli kaydıkça ekrandan dışarı çıkıyor olacak, arkaplansız kalmamak için aslında ekrana yanyana iki tane arkaplan görseli çizdiriyoruz.

Gelelim bu sınıflardan değişkenlerimizi oluşturmaya ve oyun sınıfımıza eklemeye;

  01 private Uzay Arkaplan; 02 private Ucak SavasUcagi; 03   04 protected override void LoadContent() 05 { 06     spriteBatch = new SpriteBatch(GraphicsDevice); 07   08     Arkaplan = new Uzay(Content.Load<Texture2D>("Uzay"), spriteBatch); 09     SavasUcagi = new Ucak(Content.Load<Texture2D>("Ucak")); 10     SavasUcagi.Position = new Vector2(50, PENCERE_YUKSEKLIK / 2); 11 }

Oyunumuzun Update() method’unda, klavye tuş vuruş durumlarına göre uçağımızı kontrol ediyor olacağız. Ayrıca Arkaplan değişkeninde bulunan Uzay sınıfının instance‘ından Update() method’unu çağırıyor olacağız. Böylece arkaplan görseli 0.5 birim sola kaymış olacak ve oyun penceresine yeni yerinde çizilecek.

  01 protected override void Update(GameTime gameTime) 02 { 03     KeyboardState ks = Keyboard.GetState(); 04   05     if (ks.IsKeyDown(Keys.Escape)) 06         this.Exit(); 07   08     if (ks.IsKeyDown(Keys.Left)) 09         SavasUcagi.Position.X -= (ks.IsKeyDown(Keys.LeftShift) || ks.IsKeyDown(Keys.RightShift)) ? 6 : 3; 10   11     if (ks.IsKeyDown(Keys.Right)) 12         SavasUcagi.Position.X += (ks.IsKeyDown(Keys.LeftShift) || ks.IsKeyDown(Keys.RightShift)) ? 6 : 3; 13   14     if (ks.IsKeyDown(Keys.Up)) 15         SavasUcagi.Position.Y -= 3; 16   17     if (ks.IsKeyDown(Keys.Down)) 18         SavasUcagi.Position.Y += 3; 19   20     if (SavasUcagi.Position.X < 0) 21         SavasUcagi.Position.X = 0; 22   23     if (SavasUcagi.Position.X > PENCERE_GENISLIK - SavasUcagi.Size.X) 24         SavasUcagi.Position.X = PENCERE_GENISLIK - SavasUcagi.Size.X; 25   26     if (SavasUcagi.Position.Y < 0) 27         SavasUcagi.Position.Y = 0; 28   29     if (SavasUcagi.Position.Y > PENCERE_YUKSEKLIK - SavasUcagi.Size.Y) 30         SavasUcagi.Position.Y = PENCERE_YUKSEKLIK - SavasUcagi.Size.Y; 31   32     Arkaplan.Update(); 33   34     base.Update(gameTime); 35 }

Uçağı sağa/sola yönetmek için kullandığımız ok tuşlarına (LeftRight) basılırken, Shift tuşlarından birine (LeftShiftRightShift) basılıyorsa, uçağı normalin iki katı hızlı ilerletiyoruz (3 birim yerine 6 birim)

Son olarak, Draw() method’unda uçağı ekrana çizdirecek ve Uzay sınıfının instance‘ının (Arkaplan değişkeni) Draw() method’unu çağıracağız;


01 protected override void Draw(GameTime gameTime) 02 { 03     GraphicsDevice.Clear(PENCERE_ARKAPLAN); 04   05     spriteBatch.Begin(); 06   07     Arkaplan.Draw(); 08     spriteBatch.Draw(SavasUcagi.Texture, SavasUcagi.Position, Color.White); 09   10     spriteBatch.End(); 11   12     base.Draw(gameTime); 13 }

Sonuç olarak, yukarıdaki kodları yazdıktan sonra oyun projemizi başlatırsak olur sanırım bu demek istedigin =)

0