2016-08-11 88 views
0

我正在为两名玩家开发一款简单的游戏,其中包括由Google Play服务和libGDX框架提供的实时多人游戏。基本上我使用谷歌的tutorial的代码片段。当玩家通过邀请进行连接时,实时消息不起作用

当玩家通过自动匹配功能进行连接时,所有功能都完美无缺,但是当我尝试接受邀请时,出现了问题。所有必要的回调被称为状态码STATUS_OK,但接受邀请的玩家不能向其他玩家发送可靠的消息。虽然玩家谁发送这个邀请可以发送消息,他们到达第二个设备。

是否有任何关于GPGS + libGDX的已知问题?在这种情况下,线程可能很重要(我称之为Games.RealTimeMultiplayer.join()等方法的线程)?

我很确定我所有的代码与上面的链接类似,因为我甚至试图从头开始使用GPGS + libGDX实现一个新的应用程序,但未能将此功能添加到我的现有游戏中。

而且我已经在多个设备上测试了我的应用程序,并始终得到了相同的:

  • 自动匹配 - 一切就好了;
  • 邀请 - 仅在“单向”方向工作:受邀者无法发送消息,但可以很好地接收消息,在日志或回调中没有错误。

    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# 
    

    在这个片段中,你可以看到那个房间连接,其他同行连接等等,但随后这个球员不能发送:从球员谁接受邀请角度

输出例一条消息,但成功接收一条消息。

+0

你有任何错误日志吗?从此[文档](https://developers.google.com/games/services/common/concepts/realtimeMultiplayer#sending_game_data),请确保参与者只能在连接到房间时收到消息。 – abielita

+0

两位参与者都没有错误连接。 (正如我在调试时看到的) – AlexeyGorovoy

+0

另外,如在日志中显示的那样 - 参与者之一只能接收消息,而不能发送。 – AlexeyGorovoy

回答

0

经过多日,我发现了我的愚蠢错误。我认为客户可以将他自己的参与者ID作为参与者列表中的第一个条目。

这是获取当前玩家的参与者ID(尽管在自动匹配的作品)的不正确方式:

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

这里是正确方式:

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

我希望这将帮助某人避免这样的错误。

相关问题