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

NetworkSession Sınıfı ve İçindeki Olaylar (Eventler)

yazan: 9/10/2008 6:22:00 AM

Yazılarımı okurken bir arkadaşımın kafasına iki soru takılmış, birincisi 5 yazılık dizimde hiç bahsetmediğim diğer evenler nedir ne işe yarar? İkincisi ise delagate nedir; fonksiyon falan temsil ediyormuş ama nasıl yapacağız bunu? Sorulardan birincisine hazır elimi XNA’e bulamışken hemen cevaplandırayım, özel bir cevap yazmamamın nedeni bu sorunun diğer okuyucularımın da aklına takılabileceği düşüncesi. Hemen başlıyorum.

Öncelikle şunu belirteyim bu yazıyı, 5 yazılık proje boyunca hazırlamış olduğumuz proje üzerinden anlatacağım, bunun nedeni orada zaten kullanılmış olaylarımızın olması. Hemen onların altına eklemek suretiyle kodla da görebilirsiniz.

//oyun içinde gelişmesi muhtemel olaylar:

// Önceden bildiğimiz bu event oyuncu katılınca tetiklenir

session.GamerJoined +=

new EventHandler<GamerJoinedEventArgs>(session_GamerJoined);

//Oyuncu oyundan ayrıldığında bu olayı tetiklemesi gerekir.

session.GamerLeft +=

new EventHandler<GamerLeftEventArgs>(session_GamerLeft);

//Oyun başlarken, gerekli ayarları yapmamız için tetiklememiz gereklidir

session.GameStarted +=

new EventHandler<GameStartedEventArgs>(session_GameStarted);

//Oyun bittiğinde tetiklersek, verileri temizleme işi kolay olacaktır

session.GameEnded +=

new EventHandler<GameEndedEventArgs>(session_GameEnded);

//Bir oturum kapanırken tetiklenir,

session.SessionEnded +=

new EventHandler<NetworkSessionEndedEventArgs>(session_SessionEnded);

//Eğer Host çıktıysa, ve Oyunumuz host değiştirmeye izin veriyorsa

//host değiştiğinde tetikleriz ve oyun üzerindeki kritik değişiklikleri yaparız.

session.HostChanged +=

new EventHandler<HostChangedEventArgs>(session_HostChanged);

burada parantez içinde verilen değerler Delegate’dir ve bir fonksiyonu temsil ederler. Bunu değişkenin bellek adresini gösterip içine ulaşmak için referans oluşturması gibi düşünelim şimdilik, ayrıntıyı Delagate’ler ile ilgili yazımda bulabilirsiniz. Burdan sonrada olayın tetiklenmesinden sonra işleyişe konulacak metotları yazmamız gerekiyor bunlara da event handler diyoruz. (İleride Event Handlerlar ile ilgili bir yazı da yazmayı düşünüyorum.)

şimdi event handler (olay işleyici) metotlarımızın isimlerine dikkat; az önce parametreye yazmıştık. Aslında mantık olarak bu metotları önce vermek daha anlaşılır olurdu galiba, kusura bakmayın.

void session_GamerJoined(object sender, GamerJoinedEventArgs e)

{

    if (e.Gamer.IsHost)

        durum = "Host oturum açtı";

    else

        durum = "Oyuncu: " + e.Gamer.Tag + ", oyuna katıldı";

}

Yukarıdak metodu yazmıştık daha önce;  şimdi diğer event handler metodlarını da yazalım, kullanmasak bile en azından ihtiyacınız olduğunda fikriniz olur.

void session_GamerLeft(object sender, GamerLeftEventArgs e)

{

    durum = "Oyuncu " + e.Gamer.Tag + " oturumdan ayrıldı!";

}

void session_GameStarted(object sender, GameStartedEventArgs e)

{

    durum = "Oyun Başladı";

}

void session_HostChanged(object sender, HostChangedEventArgs e)

{

    durum = "Önemli: " + e.OldHost.Tag + " Hostluğu bıraktı yeni host:" +

               e.NewHost.Tag;

}

Bu event ve Handler’ı için çok önemli bir nokta var atlamayalım derim, bu eventi gerçekleştirebilmek için;

    oturum.AllowHostMigration = true;

olması gerekmektedir.

void session_SessionEnded(object sender, NetworkSessionEndedEventArgs e)

{

    durum = "Oturum sonlandı.";

}

void session_GameEnded(object sender, GameEndedEventArgs e)

{

    durum = "Oyun sonlandı.";

}

Özetle budur; bu metotların içini oyununuza göre doldurmalısınız. Eğer bir gün gaza gelirsem tüm yazılarımı içeren bir örnek oyun yapabilirim göstermek için; fakat İspanya muhabbetlerinden dolayı şu an müsait değilim.

Currently rated 5.0 by 2 people

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

Etiketler: , , , ,

XNA

Related posts

Comments

1/13/2010 9:14:52 AM

Blockbuster

Thanks for the post. Idea behind your post is interesting.i would like to read more from you.

Blockbuster us

1/18/2010 7:16:49 PM

savas

session.GamerJoined +=

new EventHandler<GamerJoinedEventArgs>(session_GamerJoined);

bu kodu giris yaparken nereye yazacagız anlamadım yardımcı olursanız sevınırım

savas tr

1/20/2010 7:44:41 AM

acaiberry

this post is very interesting.

acaiberry us

1/27/2010 8:43:54 AM

Teeth Whitener

Your blog is very nice. I m really impressed .I m waiting for your next post. Hopefully I will get it soon.

Teeth Whitener us

1/27/2010 10:53:55 AM

how to get pregnant

I found some error in this code.

how to get pregnant us

2/25/2010 1:16:42 AM

usa mapquest

Your post is amazing. your way of telling things is great.I would like to read more from you.
Thanks for sharing information.

usa mapquest

3/3/2010 12:38:09 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:17:40 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ş