谷歌玩游戏服务。实时骨架应用程序。玩家在等候室按下后退按钮
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。
【讨论】:
以上是关于谷歌玩游戏服务。实时骨架应用程序。玩家在等候室按下后退按钮的主要内容,如果未能解决你的问题,请参考以下文章