2011-03-31 31 views
8

में 2 प्लेयर मैच पर बातचीत करने में परेशानी मुझे कुछ व्यवहार मिल रहा है जिसे मैं गेमकिट से डीकोड नहीं कर सकता।गेम किट

कभी-कभी जिस खिलाड़ी ने आमंत्रण किया है वह 'प्रतीक्षा ...' लूप में फंस गया है, और अपने निमंत्रण पर सौदे को बंद करने में असमर्थ है।

मुझे विश्वास है कि इसे मल्टीटास्किंग और आमंत्रण हैंडलर के साथ करना है ... ऐसा लगता है कि यदि आमंत्रण का ऐप स्क्रैच से शुरू होता है, तो निमंत्रण को ठीक से स्वीकार किया जा सकता है। लेकिन इसका तंत्र मेरे लिए इतना पारदर्शी नहीं है।

क्या कोई गुम हो सकता है के बारे में कोई संकेत? मैं प्रलेखन द्वारा अंधेरा हो गया हूँ।

+0

मैं एक ही समस्याओं का सामना भी .. आमतौर पर ऐप को "ताजा शुरुआत" की आवश्यकता होती है और यह फिर से काम करता है ... – xuanweng

+1

xuanweng, मुझे विश्वास है कि मुझे एक समाधान मिला है ... यह दस्तावेज में अनुशंसा की जाती है कि आमंत्रणहैंडल प्रमाणीकरण लॉकप्लेयर विथ कॉम्प्लेक्शनब्लॉक के समापन ब्लॉक में तैयार हो। मैंने अपना तैयार किया है IviteHandler को अगर (त्रुटि == शून्य) ब्लॉक में बुलाया जाना है। इस से पहले आमंत्रण हैंडलर तैयार करने के लिए कॉल डालने पर/अगर कथन (प्रलेखन कोड में प्रदान किया गया) इस समस्या को सुगम बनाता है। –

+0

आपको इसे एक उत्तर के रूप में सबमिट करना चाहिए और प्रश्न को हल करने के लिए अपना स्वयं का जवाब स्वीकार करना चाहिए। –

उत्तर

1

कभी-कभी जब दो खिलाड़ियों के बीच एक मैच शुरू होता है, तो यह संभव है कि एक खिलाड़ी के पास अभी तक कनेक्टेड स्थिति न हो। आपको यह देखना चाहिए कि वास्तव में गेम शुरू करने से पहले अधिक खिलाड़ियों को कनेक्ट होने की उम्मीद है या नहीं। यदि यह 0 से अधिक है, तो गेम शुरू करने के बजाय, प्लेयर को कनेक्ट करने की प्रतीक्षा करें, और उस खिलाड़ी को कनेक्ट होने पर ही गेम शुरू करें।

तो कोड अपने विधि के अंदर कुछ इस तरह दिखेगा जहां खेल की स्थापना कर रहे हैं:

if (currentMatch.expectedPlayerCount) { 
    waiting = YES; 
} 

और आप इस प्रतिनिधि विधि लागू करना होगा:

- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state 
{ 
    if (state == GKPlayerStateConnected) { 
     if (waiting) { 
      waiting = NO; 
      // start the game now 
     } 
    } else if (state == GKPlayerStateDisconnected) { 
     // handle disconnect 
    } 
} 
संबंधित मुद्दे