谷歌玩游戏服务。实时骨架应用程序。玩家在等候室按下后退按钮

Posted

技术标签:

【中文标题】谷歌玩游戏服务。实时骨架应用程序。玩家在等候室按下后退按钮【英文标题】:Google Play Game Services. Real Time Skeleton Application. Player presses back button in waiting room 【发布时间】:2014-09-28 19:21:25 【问题描述】:

我正在解决我在使用 Google Play 服务的实时框架(按钮点击器示例)时遇到的问题。我注意到如果玩家 1 在候诊室离开 在玩家 2 接受邀请之前按后退按钮进入房间,玩家 2 仍处于连接状态,并且玩家 2 侧的 mParticipants 的值仍然为 2,即使 玩家 1 应该已经离开了房间。

示例(玩家 1 邀请玩家 2 参加比赛。等候室已打开。):

            08-05 17:24:41.886: D/GameHelper(22237): GameHelper: onActivityResult: req=10000, resp=RESULT_OK
            08-05 17:24:41.886: D/GameHelper(22237): GameHelper: onActivityResult: request code not meant for us. Ignoring.
            08-05 17:24:41.886: D/ButtonClicker2000(22237): Select players UI succeeded.
            08-05 17:24:41.886: D/ButtonClicker2000(22237): Invitee count: 1
            08-05 17:24:41.886: D/ButtonClicker2000(22237): Creating room...
            08-05 17:24:41.906: D/ButtonClicker2000(22237): Room created, waiting for it to be ready...
            08-05 17:24:43.257: D/ButtonClicker2000(22237): onRoomCreated(0, RoomEntityRoomId=ChEKCQjEutW5sAUQAhABGAAgARDq9JSasuOhhvcB, CreatorId=p_COr0lJqy46GG9wEQAQ, CreationTimestamp=1407284683121, RoomStatus=0, Description=null, Variant=0, AutoMatchCriteria=null, Participants=[ParticipantEntityParticipantId=p_COr0lJqy46GG9wEQAg, Player=PlayerEntityPlayerId=116552246986005424427, DisplayName=Chris Sepich, IconImageUri=null, IconImageUrl=null, HiResImageUri=null, HiResImageUrl=null, RetrievedTimestamp=1407284683152, Status=1, ClientAddress=null, ConnectedToRoom=false, DisplayName=Chris Sepich, IconImage=null, IconImageUrl=null, HiResImage=null, HiResImageUrl=null, Capabilities=0, Result=null, ParticipantEntityParticipantId=p_COr0lJqy46GG9wEQAQ, Player=PlayerEntityPlayerId=113875263239226324701, DisplayName=Eric Sepich, IconImageUri=content://com.google.android.gms.games.background/images/80784b26/2, IconImageUrl=http://lh3.googleusercontent.com/-udm-yatehyg/AAAAAAAAAAI/AAAAAAAAABw/w0iPFPD2Ijs/s96-ns/, HiResImageUri=content://com.google.android.gms.games.background/images/80784b26/7, HiResImageUrl=http://lh3.googleusercontent.com/-udm-yatehyg/AAAAAAAAAAI/AAAAAAAAABw/w0iPFPD2Ijs/s96-ns-s376/, RetrievedTimestamp=1407284683151, Status=2, ClientAddress=null, ConnectedToRoom=false, DisplayName=Eric Sepich, IconImage=content://com.google.android.gms.games.background/images/80784b26/2, IconImageUrl=http://lh3.googleusercontent.com/-udm-yatehyg/AAAAAAAAAAI/AAAAAAAAABw/w0iPFPD2Ijs/s96-ns/, HiResImage=content://com.google.android.gms.games.background/images/80784b26/7, HiResImageUrl=http://lh3.googleusercontent.com/-udm-yatehyg/AAAAAAAAAAI/AAAAAAAAABw/w0iPFPD2Ijs/s96-ns-s376/, Capabilities=0, Result=null], AutoMatchWaitEstimateSeconds=-1)

示例(在等候室中。玩家 1 按下返回按钮。运行 leaveRoom())

            08-05 17:24:46.330: D/GameHelper(22237): GameHelper: onActivityResult: req=10002, resp=RESULT_CANCELED
            08-05 17:24:46.330: D/GameHelper(22237): GameHelper: onActivityResult: request code not meant for us. Ignoring.
            08-05 17:24:46.330: D/ButtonClicker2000(22237): Leaving room.

当玩家 2 接受邀请时,我检查了玩家 2 应用程序中 mParticipants 的长度:

        @Override
        public void onConnectedToRoom(Room room) 
            Log.d(TAG, "onConnectedToRoom.");

            // get room ID, participants and my ID:
            mRoomId = room.getRoomId();
            mParticipants = room.getParticipants();
            mMyId = room.getParticipantId(Games.Players.getCurrentPlayerId(getApiClient()));

            Log.d(TAG, "mParticipants.size():"+mParticipants.size());
            // print out the list of participants (for debug purposes)
            Log.d(TAG, "Room ID: " + mRoomId);
            Log.d(TAG, "My ID " + mMyId);
            Log.d(TAG, "<< CONNECTED TO ROOM>>");
        

mParticipants 数组的长度仍为 2,即使玩家 1 应该此时已离开房间。我将此作为问题发布,以查看是否有其他人 已经处理了同样的问题。我希望检查 onConnectedToRoom() 中的参与者人数,如果其中一名球员按下了等候室中的后退按钮,则比赛 应该被终止并将用户发送回主屏幕。为什么这里的 mParticipants 的长度仍然是 2 并且有一种方法可以处理其中一名玩家有这种情况的情况 候诊室里按了返回键?

我在连接播放器下找到了文档,但我仍然无法解决问题。基本上我要说的是,在迭代之后:

Games.RealTimeMultiplayer.leave(getApiClient(), this, mRoomId);

另一个客户端仍然连接,就好像玩家还在房间里一样,因为在等候室中按下了返回按钮。有补救办法吗?

谢谢

【问题讨论】:

【参考方案1】:

mParticipants 的长度不是您要寻找的值。玩家永远不会从 mParticipants 中移除,他们只是改变状态。离开的参与者将拥有 com.google.android.gms.games.multiplayer.Participant.STATUS_LEFT。

【讨论】:

以上是关于谷歌玩游戏服务。实时骨架应用程序。玩家在等候室按下后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

保存的游戏+实时多人Android

谷歌玩游戏服务,邀请好友后的等候室

当用户点击谷歌玩游戏实时多人自动匹配用户界面时该怎么办?

谷歌玩游戏实时多人游戏如何获得快速匹配玩家的名字?

完成游戏后无法再次连接两个玩家自动谷歌玩游戏服务?

快速匹配等候室弹出一次,然后在 Unity 中使用 Google 玩游戏离开