2011-10-27 24 views
5

मैंने एक बॉम्बरबर्ग एप्लिकेशन को कोड किया जो सहकर्मी कनेक्शन के लिए गेमकिट पीयर का उपयोग करता है। समस्या यह है कि थोड़ी देर के बाद खेल अब सिंक में नहीं है।खेल किट पीयर टू पीयर

मैंने जीकेटीएक्स के लिए नमूना कोड देखा और अपने मॉडल का उपयोग किया। सहकर्मियों के बीच कोई ग्राहक/सर्वर संबंध नहीं है इसलिए मैंने अपने गेम में एक का उपयोग नहीं किया। दोनों सहकर्मी एक गैमेस्टेट बनाए रखते हैं जिसे वे प्राप्त डेटा के आधार पर अपडेट करते हैं।

मेरे पास एक एनएसटीमर है जिसका उपयोग प्रत्येक फ्रेम पर गैमेलोप चलाने के लिए किया जाता है। एनएसटीमीटर सिंक में नहीं हैं इसलिए कभी-कभी गैमेस्टेट अलग-अलग हो जाते हैं: खिलाड़ी लगभग एक ही समय में एक पावरअप उठाते हैं और वे दोनों को पॉवरअप मिलता है क्योंकि इसमें डेटा भेजने में कुछ समय लगता है।

मैं ऐप को काम करने के किसी भी विचार की सराहना करता हूं। मैं क्लाइंट-सर्वर का उपयोग करने के लिए कोड को फिर से लिखने की सोच रहा हूं लेकिन मुझे यकीन नहीं है कि यह एक अच्छा विचार है ... फिर भी

धन्यवाद!

संपादित करें: मैंने कोड बदल दिया है कि एक यादृच्छिक खिलाड़ी मेजबान होने के लिए चुना जाता है। हर बार एक खिलाड़ी एक बम रखता है, वह सर्वर से कहता है कि उसे कहां रखा जाए। सर्वर खिलाड़ियों की स्थिति देता है (जैसा सर्वर पर देखा जाता है) और फिर उस खिलाड़ी को बताता है कि बम कहां रखा जाए।

पावरअप के लिए सर्वर जांचता है कि क्या कोई खिलाड़ी पावरअप उठाता है और यदि उसने ऐसा किया तो उसे सूचित करने वाला एक पैकेट भेजता है।

अब एक और समस्या दिखाई दी है। उपकरणों के बीच विलंबता उच्च है (मैं ब्लूटूथ कनेक्शन का उपयोग कर रहा हूँ)। क्लाइंट ने इसे रखने के लिए बटन टैप करने के बाद बम लगाने के लिए लगभग 0.2 सेकंड लगते हैं।

मैं सभी डेटा विश्वसनीय रूप से भेज रहा हूं। क्या मैं इसे ठीक से कर रहा हूं?

दोनों खिलाड़ियों पावरअप की जल्दी:

उत्तर

4

खैर preferbly आप एक मेजबान-ग्राहक संबंध जहां केवल मेजबान खेल राज्य में हेरफेर कर सकते हैं, तो आपके मामले में यह होगा चाहते हैं। होस्ट इसे पहले उठाता है।
यह पंजीकृत हो जाता है और मेजबान पावर-अप प्राप्त करता है।
इस बीच खिलाड़ी # 2 भी पावर-अप उठाता है, मेजबान को कार्रवाई भेजता है।
मेजबान खिलाड़ी # 2 को सूचित करता है कि पावर-अप पहले ही गायब हो गया है।

आपकी स्थिति के साथ आप पैकेट नुकसान से desynchs प्राप्त करने के लिए बाध्य हैं।
होस्ट-क्लाइंट रिलेशनशिप के साथ ऐसा नहीं हो सकता है, केवल समस्या यह है कि मेजबान का हमेशा एक फायदा होता है जो डिवाइस के बीच विलंबता विशेष रूप से स्मार्टफ़ोन पर बढ़ता है।

बॉम्बरबर्गर जैसे गेम में पूरे गैमेस्टेट को हर बार कुछ क्रियाओं के बदले कुछ बदलाव करने के लिए पूरी तरह से व्यावहारिक है, यह सुनिश्चित करना है कि दोनों डिवाइस सिंक हो जाएं।

इसे समेटने के लिए: दोनों उपयोगकर्ताओं के पास उनके गैमेस्टेट हैं लेकिन केवल मेजबान दोनों ही कुशलतापूर्वक उपयोग कर सकते हैं।

0

आपको क्या करना चाहिए:

  • उपकरणों में से एक मेजबान है, एक और एक ग्राहक
  • मेजबान प्रक्रिया सभी खेल राज्यों और निर्णय करता है, तो यह ग्राहक के लिए पूरी gamestate भेजता
  • क्लाइंट को गैमेस्टेट मिल जाता है और बस इसके आधार पर सब कुछ खींचता है - यह कोई निर्णय नहीं लेता है (जिसने बम उठाया है, बम विस्फोट किया है आदि)
  • क्लाइंट सिर्फ मेजबान (दबाए गए बाएं, दाएं, रोकें आदि) में इनपुट भेजता है

यह है। यदि आप दोनों मशीनों पर निर्णय लेने का प्रयास करते हैं, तो आप उन्हें सिंक में रखने की कोशिश कर रहे बड़ी परेशानियों में भाग लेंगे।

संबंधित मुद्दे