2012-08-27 17 views
6

मेरे पास 2-प्लेयर, आईओएस टर्न-आधारित गेम है जो गेम सेंटर और जीके टर्नबेस मैच का उपयोग करता है।आईओएस गेम किट टर्न आधारित मैच प्रोग्रामेटिक रीमेच

क्या कोई मैच समाप्त होने के बाद प्रतिद्वंद्वी को प्रोग्रामेटिक रूप से रीमेच करने का कोई तरीका है?

मैं खिलाड़ियों को एक-दूसरे के साथ एक नया मैच शुरू करने के लिए एक-बटन पहुंच देना चाहता हूं।

यदि कोई बटन दृष्टिकोण नहीं है, तो कुछ संभावित विकल्प क्या हैं?

+1

अच्छी खबर! आईओएस 6 के साथ अब यह करना बहुत आसान है कि बस GKTurnBasedMatch के रीमेच WithCompletionHandler का उपयोग करें। –

उत्तर

4

वास्तव में यह प्रतीत होता है एक पूर्ण कार्यक्रम संबंधी समाधान खेल केंद्र द्वारा नजरअंदाज कर दिया जा रहा है। एक दर्द, इसमें कोई संदेह नहीं है। अपने @selector (doRematchTap) में निम्नलिखित ... या कुछ बराबर का प्रयास करें:

NSMutableArray *playerIds = [NSMutableArray array]; 
    GKTurnBasedParticipant *otherPlayer = /* Get the other player some way */; 
    GKTurnBasedParticipant *myParticipant = /* Get yourself a very similar way*/; 

    [playerIds addObject:myParticipant.playerID]; 
    if (otherPlayer.playerID) { 
     [playerIds addObject:otherPlayer.playerID]; 
    }// sanity check 

    GKMatchRequest *request = [[GKMatchRequest alloc] init]; 
    request.playersToInvite = playerIds; 
    request.minPlayers = 2; 
    request.maxPlayers = 2; 

    GKTurnBasedMatchmakerViewController *tbmcv = [[GKTurnBasedMatchmakerViewController alloc] initWithMatchRequest:request]; 
    tbmcv.showExistingMatches = NO; 
    tbmcv.turnBasedMatchmakerDelegate = /* Your normal delegate for the callbacks */; 

    [self presentViewController:tbmcv 
         animated:YES 
        completion:^{ 
         }]; 

महत्वपूर्ण showExistingMatches = नहीं है, जो सही उपयोगकर्ता के साथ सही जीवनसाथी का चुनाव मोड में दृश्य नियंत्रक पर चला जाएगा नोट करने के लिए पूर्व-चयनित (ऐसा लगता है), और उपयोगकर्ता के मौजूदा मैचों को नहीं दिखाता है।

+0

धन्यवाद! यह चाल showExistingMathes को NO पर सेट करना था। यह वही नहीं है जो मैं चाहता था (उपयोगकर्ता को अभी भी "अगला" और "भेजें" पर क्लिक करना है, लेकिन यह बहुत आसान रीमेच की अनुमति देता है। –

+1

आईओएस 6 में गेम सेंटर इंटरफ़ेस की आवश्यकता के बिना रीमेच करने के लिए एक नया एपीआई है। विधि है: GKTurnBasedMatch-> rematchWithCompletionHandler –

1

मैं पूरी समाधान नहीं है, लेकिन आप के लिए एक विचार:

हर खिलाड़ी के लिए एक अनूठा खिलाड़ी-आईडी है, कि आप प्राप्त कर सकते हैं यदि आप इसे दूर एक

didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID

के बाद की दुकान

अब आप प्रोग्रामेटिक रूप से एक नया मैच शुरू कर सकते हैं और इस प्लेयर को आमंत्रित कर सकते हैं। उनसे पूछा जाएगा कि क्या वह एक रिमेच चाहता है और फिर आप फिर से खेल सकते हैं।

मुझे पता है कि यह कोड या ठोस सलाह नहीं है, लेकिन शायद GameKit Class Reference में बाकी को खोजने के लिए पर्याप्त जानकारी है।

मुझे आश्चर्य है कि क्या आप इसे काम कर सकते हैं, मुझे बताएं कि आपने क्या किया और शुभकामनाएँ!

संपादित करें:

मैं references में खोज की है और पाया है यह:

- (void) loadPlayerData: (NSArray *) identifiers 

मैं इसे बाहर अपने आप की कोशिश की नहीं था, लेकिन आप इस तरह से एक बार फिर, अगर आप खिलाड़ी मिलना चाहिए अपने पहचानकर्ता को एक सरणी में स्टोर करें और इसे इस फ़ंक्शन पर पास करें।

मुझे आशा है कि वे खेल केंद्र के लिए iOS6 में कुछ बदलाव लाने के लिए, कि आप अपने अपने तरीके से प्रोग्राम के रूप में अपने मैचों कर सकते हैं ...

+0

मुझे नहीं लगता कि यह वर्तमान में संभव है। एक विधि अनुरोध प्रोग्रामेटिक रूप से सबमिट करने के लिए मुझे जिस विधि को पता है वह ढूँढता है MatchForRequest: withCompletionHandler। इसके दस्तावेज में निम्नलिखित कथन है: मैच अनुरोध के खिलाड़ियों को इनवॉइट संपत्ति को अनदेखा किया जाता है; मैच में खिलाड़ियों के एक विशिष्ट सेट को आमंत्रित करने के लिए, आपको मानक यूजर इंटरफेस प्रदर्शित करना होगा। –

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