2011-03-30 2 views
1

J'ai développé une application iPhone qui utilise le GameCenter. Pour soutenir les différents niveaux de mon jeu, j'ai placé le playerGroup dans la classe GKMatchRequest. Si la correspondance est démarrée par un processus de création de correspondance automatique, les deux utilisateurs connaissent le playerGroup, mais si le processus d'invitation est utilisé, l'invité ne connaît pas le playerGroup.iPhone GameCenter invitation avec playerGroup

J'ai essayé de lire le playerGroup dans la méthode

- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match 

en utilisant

[viewController matchRequest].playerGroup, mais la playerGroup propriété reviennent toujours 0, à la place du groupe de joueurs à droite.

Est-ce que quelqu'un a une idée de comment résoudre ce problème? J'ai besoin de connaître le playerGroup pour charger le bon niveau.

Merci beaucoup pour votre aide

Répondre

1

Pour autant que je sache, c'est construit dans la limitation du Game Center. J'ai lutté avec lui aussi, et demandé sur plusieurs forums, y compris les Devforums Apples, sans aucune réponse. J'ai écrit un rapport de bug à Apple et je vous suggère de faire la même chose. Comme solution de contournement dans mon propre jeu, où j'ai plusieurs règles différentes que les joueurs choisissent et où les joueurs doivent partager les mêmes règles pour les matchs multijoueurs, je mets un "double contrôle" après que le jeu commence réellement pour s'assurer que tout le monde suit les mêmes règles: Au cas où quelqu'un serait invité et utilise les mauvaises règles.

Ce que je fait est, dès le début du jeu (que vous devez détecter dans les deux la méthode didFindMatch du GKMatchMakerViewControllerDelegate et match: Joueur: didChangeState: dans GKMatchDelegate) je laisse les joueurs entrent dans le jeu et envoient ensuite des paquets contenant les règles qu'ils utilisent à tous les autres joueurs. Quand ils reçoivent ces données, ils correspondent à leurs propres règles et si quelqu'un utilise les mauvaises règles, le jeu mettra une alerte et déconnecter le match.

C'est un peu moche, et il est très clair qu'Apple devrait implémenter un moyen de définir un GKMatchRequest pour un GKMatchMakerViewController lorsqu'il est initialisé par une invitation. Mais au moins cela fonctionne.

1

J'ai trébuché sur le même problème. Pour contourner ce problème, j'envoie une poignée de main avec toutes les informations de personnalisation de jeu pertinentes via l'objet GKMatch. J'envoie les données avec GKMatchSendDataReliable DataMode afin que la négociation n'échoue pas.

Une fois toutes les informations collectées par les clients, la logique de jeu réelle est créée et démarrée sur sa base.

+1

Avez-vous du code pour aider l'OP? – dove

0

Vous pouvez vérifier le groupe de joueurs d'une demande de match comme celle-ci.

func player(player: GKPlayer, didAcceptInvite inviteToAccept: GKInvite) { 
    if inviteToAccept.playerGroup == 0 || inviteToAccept.playerGroup == myPlayerGroup { 
     inviteAccepted() 
    } 
    else { 
     // TO SOMETHING 
     myPlayerGroup = inviteToAccept.playerGroup 
     inviteAccepted() 
    }