2017-07-08 1 views
0

J'ai rencontré un problème étrange. Dans mon utilisateur jeu multijoueur décide combien d'adversaires ils veulent jouer avec (jusqu'à 3), et après qu'ils ont décidé que je créer un autoMatchCriteria comme this-L'automatch multijoueur en temps réel de Google ne fonctionnera pas pour plus d'un adversaire.

Bundle am = RoomConfig.createAutoMatchCriteria(opponentCount, opponentCount, 0); 

Et créer une chambre-

// build the room config: 
     RoomConfig.Builder roomConfigBuilder = makeBasicRoomConfigBuilder(); 
     roomConfigBuilder.setAutoMatchCriteria(am); 
     RoomConfig roomConfig = roomConfigBuilder.build(); 

     // create room: 
     Games.RealTimeMultiplayer.create(((MainActivity) getActivity()).getGoogleApiClient(), roomConfig); 

Ceci déclenche le paramètre onJoinedRoom() ou onRoomCreated() de RoomUpdateListener en conséquence. Et pendant que l'utilisateur attend dans une salle d'attente, il obtient des mises à jour de statut de salle dans onPeersConnected() de RoomStatusUpdateListener quand un pair est connecté et après que les joueurs minimum requis sont connectés, le jeu peut être démarré.

Mais lorsque l'utilisateur sélectionne plus d'un adversaire, onPeersConnected() n'est appelé qu'une fois, voire pas du tout, et le joueur connecté attend indéfiniment jusqu'à ce qu'il quitte la pièce.

Je l'ai essayé avec la salle d'attente de google et curieusement cela a fonctionné pour chaque compte d'adversaire. Donc, si quelqu'un peut me signaler ce que je fais mal, ce serait une aide précieuse. Je vous remercie.

Répondre

0

En partant de ce thread, si vous définissez min à 1 et max à 3, vous obtiendrez peut-être une partie à 2 joueurs. Pour avoir des joueurs jusqu'à 3, réglez MIN_OPPONENTS et MAX_OPPONENTS sur 3, et gérez la logique de démarrage du jeu à partir de votre code. Si la logique devient plus compliquée, il peut être judicieux d'opter pour un "serveur". Vous pouvez le faire, par exemple, en disant que le client ayant le numéro d'identification du participant le plus bas (lexicographiquement) est le serveur. Dire que "celui qui a créé le jeu est le serveur" n'est pas bon, car en automatching, tout le monde pense avoir créé le jeu. Espérons que cela aide!