【问题标题】:Leave the game to which I was invited离开我被邀请的游戏
【发布时间】:2014-03-06 16:37:18
【问题描述】:

我在处理邀请时遇到问题。 设想: 1.朋友邀请我参加他的游戏 2.我通过推送通知加入游戏 3. MenuActivity 中的 onSignInSucceeded() 运行我的主要游戏活动

@Override
public void onSignInSucceeded() {
    Games.Invitations.registerInvitationListener(getApiClient(), this);


    if (getInvitationId() != null) {
        Intent intent = new Intent(getApplicationContext(), FindRoomActivity.class);
        intent.putExtra(BundleConstants.FRIEND_GAME_CLIENT, true);
        intent.putExtra(BundleConstants.INVITATION_ID, getInvitationId());
        startActivity(intent);
    }
}

4. 朋友在游戏结束前离开游戏,在我的屏幕上弹出窗口,确认后我回到了我的 Menuactivity,并再次运行代码表单 onSignInSucceeded 并再次 getInvitationId() 返回相同(已取消)游戏的邀请。

在我离开那个被取消的游戏之前,我试图运行 deferRoomInvitation 或 dismissRoomInvitation,但没有任何帮助。

【问题讨论】:

  • 究竟是如何“离开”游戏的。你是要结束活动还是什么?
  • @Clay - 我使用 Games.RealTimeMultiplayer.leave(getApiClient(), this, mRoom.getRoomId());
  • 他在开始 3 秒后离开游戏 ;-)
  • 看到这对于实时多人游戏来说很奇怪。我制作了一个回合制多人游戏,当有人离开比赛时很容易检测到,因为你接到了onTurnBasedMatchReceived 的电话。我正在为实时多人游戏寻找类似的东西......

标签: google-play-games


【解决方案1】:

好的,我想我有一个想法。我不明白为什么这不起作用。

当您调用Games.RealTimeMultiplayer.leave(getApiClient(), this, mRoom.getRoomId()); 时,您正在输入一个RoomUpdateListener,其中有以下听众:onJoinedRoomonLeftRoomonRoomCreatedonRoomConnected

所以这就是你要做的,当一个玩家离开游戏时,他/她的onLeftRoom将被调用,当它被调用时,使用Games.RealTimeMultiplayer.sendReliableMessage向其他玩家发送消息,然后当其他玩家收到此消息,他/她将知道玩家离开了游戏,因此您可以为该游戏发出邀请null,因此当再次调用signInSucceeded 时,它不会尝试接受取消游戏的邀请。

我认为这是实现它的最佳方式。希望这对您有所帮助:)

【讨论】:

  • 有方法 onPeerLeft(Room room, List strings) 所以当有人离开时不需要发送消息,onPeerLeft 会通知你,但你回答有帮助,在开始新活动后我'将邀请设置为空,看看会发生什么:)
猜你喜欢
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
相关资源
最近更新 更多