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

3/30/2010 12:27:49 PM

ucvhost

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

ucvhost us

5/24/2010 11:20:08 AM

P90X

Thanks for sharing your thoughts with us.. I would like to read more from you..

P90X us

5/24/2010 11:22:02 AM

Gone with the wind movie

Your post is rocking and knowledgeable... I really appreciate the way you write . I would like to read more from you.

Gone with the wind movie us

5/27/2010 11:55:39 PM

designer bags sale

While this subject can be very touchy for most people, my opinion is that there has to be a middle or common ground that we all can find. I do appreciate that youve added relevant and intelligent commentary here though. Thank you!

designer bags sale US

5/28/2010 6:42:00 PM

hepes books

Outstanding info! Keep writing buddy!

hepes books us

7/9/2010 11:22:43 AM

bass fishing rods

Thank you for the article. Very interesting topic.

bass fishing rods gb

Add comment


(Will show your Gravatar icon)  

  Country flag

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



Live preview

9/4/2010 12:15:53 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þ