Selamlar;
ınternette uzun araştırmalar sonucunda konuyla ilgili bana yardımcı olabilecek arkadaşların bu forumda olabileceğini düşündüm.
2 senedir vb6 da 2d online bir futbol oyunu yazıyorum. En başlarda multiplayer işini en son yaparım diyerek baya bir ilerledim. %60 a gelince belki işin içinden çıkamam oyun o yüzden kalır düşüncesiyle multiplayerı test etmeye başladım ve gerçekten de çıkamadım.
Basit olarak clientlar birbirlerine futbolcuların ve topun gidecekleri xyleri gönderiyordu. Tabii arada bir gecikme olduğu için, clientlar rakiplerinin yeni hamlelerini bir süre sonra farkediyordu. Ve iki clientta da aynı görüntü oluşmuyordu.
Bunu önlemek içi bir server yazılımı hazırladım. Clientlardan sadece basılan tuşları alıp servera gönderdim. Serverda oyunu oynattıktan sonra clientlara futbolcuların ve topun xylerini gönderdim. Bu sefer her iki clientta da aynı görüntü oluşur gibi oldu. Ama asıl sıkıntı, client klavyede örneğin sağ tuşa bastığında futbolcunun anında değilde biraz daha sonra ilerlemesi oldu. Bu da oynanabilirliği düşürdüğü için vazgeçtim.
Daha önce skatein açtığı konuyu incelediğimde aklımda yeni bişeyler şekillendi.
Oyunu max 2 kişi oynayacağı için servera gerek yok. clientlar birbirlerine veri gönderecek.
1)ılk oyun başlarken time-a.nist.gov dan iki clientda saati alacaklar. Bu şekilde saatlerimizi ayarlayalım olayı gerçekleşecek.
2)Sonra ilk client futbolcuların ve topun o anda olduğu xy, hızları ve gideceği x ve yleri bir stringe yazacak ve başına saati ekleyecek.Bunu karşıya gönderecek.
3)ıkinci Client bu veriyi aldığında kendi saatiyle gelen paketteki saati karşılaştıracak.Aradaki gecikmeyi alıp futbolcuların gitmesi gereken yerden şuanki yerini çıkarıp bir futbolcunun katedeceği toplam mesafeyi bulacak. Mesafeyi hıza bölüp 1milisaniyede ne kadar hareket eder bulacak. ve bunu gecikme zamanıyla çarptığında paket gelene kadar futbolcu ne kadarlık bir hareket etmiş hesaplayıp yerini değiştirecek.
Bu mantık doğrumudur veya daha kullanışlı bir yol bulabilir miyim daha önce bu konuda kod yazan arkadaşlara danışmak istedim.
Teşekkürler:)