我正在为两位玩家开发一款由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 :(得分:0)
过了好几天,我发现了我的愚蠢错误。我认为客户可以将自己的participantId作为参与者列表中的第一个条目。
获取当前玩家参与者ID的不正确方式(虽然适用于自动匹配):
String myPartId = room.getParticipants().get(0) // I was doing so :(
以下是正确的方式:
String myPlayerId = Games.Players.getCurrentPlayer(gameHelper.getApiClient()).getPlayerId();
String myPartId = room.getParticipantId(myPlayerId);
我希望这可以帮助别人避免这样的错误。