Google Play 服务 - 房间 - CreatorID 不唯一

Posted

技术标签:

【中文标题】Google Play 服务 - 房间 - CreatorID 不唯一【英文标题】:Google Play Services - Room - CreatorID Not Unique 【发布时间】:2013-10-29 04:52:02 【问题描述】:

仅仅是我还是 Room 中的 getCreatorId() 方法不是自动匹配游戏独有的?

我的游戏中有一些逻辑基于一个独特的实体来决定事情,例如哪个球员属于哪个球队。每个客户端都在启动和设置游戏之前等待从“主机”(在本例中为房间创建者)接收此信息。

@Override
public void onRoomConnected(int status, Room room) 
  // Game Lobby is full
  if (status != GamesClient.STATUS_OK) 
    return;
  

  this.room = room;

  // Assign the players teams
  if (room.getParticipantId(activity.gameHelperManager.gameHelper.getGamesClient().getCurrentPlayerId()).equals(room.getCreatorId())) 
  // Some logic here
  activity.androidManager.sendMessage(Data Sent Here);

  activity.game.startGame(GameType.MULTIPLAYER);
  

另一方面:

@Override
public void onRealTimeMessageReceived(RealTimeMessage message) 

  // Get Message from host about game specific properties is here
  if (data.contains(Message Tag Here)) 
    // Parse information
    activity.game.startGame(GameType.MULTIPLAYER);
  

但是,在自动匹配类型的游戏中,每个客户端都将自己视为 onRoomConnected() 方法中的主机。

是否有解决方案,还是我遗漏了一些基本的东西?

【问题讨论】:

我找到了答案,至少可以说这是一个'api'错误或误解,请参阅here 【参考方案1】:

诚然,我们的文档有点误导(我要求立即进行修复),但以下是我们设计此文档时所经历的解释:-D

自动化的真正作用是将不同人创建的不同房间连接起来,并将它们变成一个几乎每个人都在其中的房间。所以房间里的不同人可能对谁是房间的创造者有不同的看法。因此,使用房间的创建者来决定谁先走通常不是一个好主意。

直接使用参与者 ID 也不是一个好主意(因为参与者 ID 在字典上非常高的人会发现自己在他们玩的每一场游戏中都排在最后)。

请参阅我对以下问题的回答,了解有关如何决定谁先走的更多想法:

How to decide who is the first player when user plays quick game?

【讨论】:

感谢 Bruno,此信息非常有见地(尤其是关于参与者 ID 并未真正“随机化”)。就我而言,谁做出决定并不重要,只要参与者同意谁将是做出这些决定的人(不会获得任何优势,例如先走)。但是,如果将来很重要,我会记住您的第二条建议。 所以...我们基本上没有可用的虚拟合并房间 ID?我需要一些字符串,数字,对于游戏中的所有玩家来说都是相同的,因为我需要将它用于种子到 Random() 一些东西,对于游戏中的每个玩家来说都是一样的。在使用邀请时一直在使用它,自动化毁了这一切:/

以上是关于Google Play 服务 - 房间 - CreatorID 不唯一的主要内容,如果未能解决你的问题,请参考以下文章

创建房间时 CONNECTION_FAILED Google Play 服务

使用Google Play游戏服务android成功创建房间后强制启动游戏

在 iOS 上创建实时房间后,Google Play 游戏服务崩溃

如何在实时多人游戏 Google Play 游戏服务中向其他参与者发送有关房间创建的数据

Google-Play-Services:创建自定义候诊室 UI

当应用程序进入后台时,实时多人 Google Play 游戏服务对等方断开连接