Yazılarımı Daha Kolay Takip Etmek İçin Tıklayın!

XNA’de KULLANICI ETKİLEŞİMİ

yazan: 7/28/2008 8:20:00 PM

XNA’de bildiğiniz gibi hem Game pad hem de Klavye ile kullanıcı’dan veri alabiliyoruz. Ben işin PC tarafıyla daha çok ilgilendiğim için bu yazımda biraz Klavye ve Fare(Mouse) girdilerinden bahsetmek istiyorum.

Öncelikle bu kodları Update metoduna yazıp deneyebilirsiniz ama gerçek bir oyunda Update() metodunda sadece KlavyeKontrol() gibi bir metot kullanmalıyız. Buraya kendi kaba algoritması dışında daha özel işler için kod yazmayın, metot yazıp burda çağırın.

Öncelikle Klavyemizin o anki durumunu temsil edebilmemiz gerekir bunun için:

 

            // Burada klavyemizi temsilen bir değişken atadık,

      // ve bu değişken klavyenin o anki durumunu tutuyor.

      KeyboardState klavye = Keyboard.GetState();

 

Artık hangi tuşa basıldığını anlamak if deyimi aracılığı ile bizim kontrolümüze kalmış. Tabi  bundan sonra bir olay (event) yazıp bunu tetiğe(trigger)bağlamak buna göre otomatik sonuç sağlamak da mümkün.

     

      //Eğer klavyede basılan tuş yukarı(up)Tuşu ise:

      if(klavye.IsKeyDown(Keys.Up))

{ //true ise yapılacak hareket}

 

Burda gördüğünüz gibi IsKeyDown(Keys key) metodunu kullandık. Bize sağlanılan enum tipindeki “keys” ile istediğimiz tuşu parametre olarak verebiliyoruz.

Temeli bu şekilde olmak üzere gerisi size kalmış.

İşin fare kısmına gelecek olursak, bir problem karşımıza çıkıyor; şöyle anlatayım:

Bir oyun düşünün bir tuşu var ve bu tuşa her basışta paranızı götürüyor karşılığında size bir araba veriyor. Doğal olarak aynı anda sadece 1 ya da 2 arabaya ihtiyacınız var. Ama Update() metodu öylesine sık yenileniyor ki, siz farenin tuşuna basıp çekene kadar 40 – 50 kez yenileniyor. Eğer buna bir önlem almazsanız tuşa tek basışta 40 tane arabanız olmuş oluyor! Korkunç bir sonuç. İşte fareden girdi alırken bu sorunu göz önünde bulundurmalıyız.

Bunun için önce 2 tane MauseState değişkeni tanımlamalıyız birisi o anki durumu, diğeri ise önceki durumu tutmalı. Ve uyarmalıyım ki bu değişkenler kesinlikle update metodunun dışında olmalı ki kayıt tutabilsin.

           

// Farenin önceki ve o anki durumunu tutacak olan değişkenler.

      MouseState fareninÖncekiHali, fareninŞimdikiHali;

 

Sonra öyle bir kontrol deyimi yazmalıyız ki şimdiki durum bastığımızı gösterirken, önceki durum bırakmış olduğumuzu göstersin.

           

              fareninŞimdikiHali = Mouse.GetState();

        if (fareninŞimdikiHali.LeftButton = ButtonState.Pressed &&

        fareninÖncekiHali.LeftButton = ButtonState.Released)

        {

        // Fare tuşuna basılınca yapılacak işlemler.

        }

        fareninÖncekiHali = fareninŞimdikiHali; 

 

Bu şekilde fazladan basma sorununu da hallettik. Umarım faydalı olmuştur.

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: , ,

XNA

Related posts

Comments

11/9/2009 8:23:34 PM

payday loans

Like your writing! Still you can do some things to improve it.

payday loans us

1/23/2010 12:28:05 AM

faxless payday loans

Where much is expected from an individual, he may rise to the level of events and make the dream come true.

faxless payday loans us

2/7/2010 9:30:39 PM

natural detox

Putting off an easy thing makes it hard. Putting off a hard thing makes it impossible.

natural detox us

2/17/2010 9:05:42 AM

auto insurance

been searching this for some time now - i guess luck is more advanced than search engines Smile

auto insurance us

2/17/2010 9:05:49 AM

auto insurance

been searching this for some time now - i guess luck is more advanced than search engines Smile

auto insurance us

3/3/2010 12:42:55 PM

ucvhost

Thanks for the great post,i love to read articles that are informative and beneficial in nature.

ucvhost us

Add comment


(Will show your Gravatar icon)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Live preview

3/11/2010 3:16:26 PM

 

Yazar Hakkında

Erçin YONTAR
Erçin Yontar
1986 yılında Çorlu'da doğdu.İlk öğrenimini Ankara'da, ortaöğrenimini Eskişehir'de gördü.
Çanakkale 18 Mart Üniversitesi Bilgisayar Mühendisliği Bölümü mezunu.
Yazılım ile çok ilgili; Visual Studiosu daima açık :) bunun sayesinde Imagine Cup 2008 Türkiye 3.sü ve bir çok proje geliştiriyor.
Yazılım dışında : Frp hastası, rock/metal dinliyor, organizasyon işlerine merak sardı. Bunların yanında o bir; 
MCTS (Microsoft Certified Technology Specialist)



MSP (Microsoft Student Partner)

Bana posta atın Send mail

Favorilerine Ekle


Add to Technorati Favorites

 

Twitter - Ne Yapıyorum?

    Pages

      Recent comments

      Feragatname

      Burada yazan yazılar ve içerdikleri fikirler yazarına aittir. Başkasını ilgilendirmez. Yazıları kaynağını kopyaladığınız yazının içinde tıklanabilir link halinde belirtmek şartı ile olduğu gibi kullanabilirsiniz. Bu kuralları değiştirme hakkım saklıdır. Yarın bir gün benim yazım benim blogumdan başka bir yerde olamaz dersem Kopyaladığınız yazıyı da silmek zorundasınız. Bu işe girşen kişi bu koşulları ve doğan yasal yükümlülükleri kabul etmiş sayılır. Eyvallah diyen devam etsin.

      © Tüm hakları saklıdır.

      Giriş