2016-08-11 4 views
0

Je développe un jeu simple pour deux joueurs avec le multijoueur en temps réel fourni par Google Play Services et le framework libGDX. Fondamentalement, j'utilise des extraits de code de google tutorial. Lorsque les joueurs se connectent via la fonction de correspondance automatique, tout fonctionne parfaitement, mais lorsque j'essaie d'accepter une invitation, quelque chose ne va pas. Tous les rappels nécessaires sont appelés avec le code d'état STATUS_OK, mais le joueur qui a accepté l'invitation ne peut pas envoyer un message fiable à l'autre. Alors que le joueur qui a envoyé cette invitation peut envoyer des messages, et ils arrivent sur le second périphérique.La messagerie en temps réel ne fonctionne pas lorsque les joueurs se connectent via l'invitation

Y at-il des problèmes connus concernant GPGS + libGDX? Peut-être threading questions (dans quel fil j'appelle des méthodes comme Games.RealTimeMultiplayer.join() etc) dans ce cas? Je suis assez sûr que tout mon code est similaire au lien ci-dessus, parce que j'ai même essayé de mettre en œuvre une nouvelle application à partir de zéro avec GPGS + libGDX, lorsque je n'ai pas ajouté cette fonctionnalité à mon jeu existant.

Aussi je l'ai testé mes deux applications sur plusieurs appareils, et toujours obtenu le même:

  • auto-match - tout très bien; Invite: ne fonctionne que dans un seul sens: l'invité ne peut pas envoyer de messages, mais les reçoit correctement, sans erreurs dans les journaux ou les rappels.

Exemple de sortie du point de vue du joueur qui a accepté l'invitation:

08-11 18:35:52.219 14173-14173/com.teremok.taptapparty D/PartyRoomUpdateListener: onJoinedRoom - success 
08-11 18:35:52.219 14173-14173/com.teremok.taptapparty D/PartyRoomUpdateListener: Room participants: 
08-11 18:35:52.219 14173-14173/com.teremok.taptapparty D/PartyRoomUpdateListener: HateCrub - p_CMCMr4mRp_K63QEQAQ 
08-11 18:35:52.219 14173-14173/com.teremok.taptapparty D/PartyRoomUpdateListener: AlexeyGorovoy - p_CMCMr4mRp_K63QEQAg 
08-11 18:35:52.219 14173-14173/com.teremok.taptapparty D/PartyRoomStatusUpdateListener: onPeerJoined - [p_CMCMr4mRp_K63QEQAQ] 
08-11 18:35:53.979 14173-14173/com.teremok.taptapparty D/PartyRoomStatusUpdateListener: onP2PConnected - p_CMCMr4mRp_K63QEQAQ 
08-11 18:35:54.419 14173-14173/com.teremok.taptapparty D/PartyRoomStatusUpdateListener: onConnectedToRoom 
08-11 18:35:54.429 14173-14173/com.teremok.taptapparty D/PartyRoomStatusUpdateListener: onPeersConnected - [p_CMCMr4mRp_K63QEQAQ] 
08-11 18:35:54.439 14173-14173/com.teremok.taptapparty D/PartyRoomUpdateListener: onRoomConnected - success 
08-11 18:35:54.439 14173-14173/com.teremok.taptapparty D/AndroidMultiplayer: sending message: hello#AlexeyGorovoy# 
08-11 18:35:54.439 14173-14173/com.teremok.taptapparty D/AndroidMultiplayer: message sent failed - network error (STATUS_REAL_TIME_MESSAGE_SEND_FAILED) 
08-11 18:35:54.779 14173-14173/com.teremok.taptapparty D/PartyMessageReceiver: onMessageReceived: hello#HateCrub# 

Dans cet extrait, vous pouvez voir cette pièce est connecté, autre pair est connecté etc, mais ce joueur ne peut pas envoyer un message, mais en reçoit un avec succès.

+0

Avez-vous des journaux d'erreurs? À partir de cette [documentation] (https://developers.google.com/games/services/common/concepts/realtimeMultiplayer#sending_game_data), assurez-vous qu'un participant ne peut recevoir des messages que lorsqu'il est connecté à la salle. – abielita

+0

Aucune erreur dans les journaux pour les deux participants, les deux connectés. (Comme je l'ai vu pendant le débogage) – AlexeyGorovoy

+0

En outre, comme indiqué dans les journaux dans le post-un des participants ne peuvent recevoir des messages, mais pas envoyer. – AlexeyGorovoy

Répondre

0

Et après plusieurs jours j'ai trouvé mon erreur stupide. Je pensais que le client pouvait obtenir son propre participantID en tant que première entrée dans la liste des participants.

Il est le incorrect moyen d'obtenir l'identifiant du participant joueur actuel (si les travaux en auto match):

String myPartId = room.getParticipants().get(0) // I was doing so :(

Voici la bonne façon :

String myPlayerId = Games.Players.getCurrentPlayer(gameHelper.getApiClient()).getPlayerId(); 
    String myPartId = room.getParticipantId(myPlayerId); 

J'espère que cette aidera quelqu'un à éviter de telles erreurs.