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

3/30/2010 12:29:57 PM

ucvhost

Your blog is my favorite, congratulates. Often I'll look here, a lot of information and nice site.

ucvhost us

5/22/2010 5:15:02 PM

cheap hosting

Your blog is my favorite, congratulates

cheap hosting

5/27/2010 11:56:52 PM

designer bag

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

designer bag US

7/13/2010 7:43:49 PM

payday loans

One must learn by doing the thing. For though you think you know it, you have no certainty until you try. http://www.clicknpayday.com

payday loans us

7/21/2010 2:52:53 PM

online payday loans

I consider a goal as a journey rather than a destination. And each year I set a new goal

online payday loans us

Add comment


(Will show your Gravatar icon)  

  Country flag

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



Live preview

9/4/2010 12:03:42 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þ