来自谷歌服务的实时多人游戏问题(为您的房间配置添加专属位掩码)

Posted

技术标签:

【中文标题】来自谷歌服务的实时多人游戏问题(为您的房间配置添加专属位掩码)【英文标题】:The issue with real-time multiplayer from google services (adding an exclusive bitmask to your room configuration) 【发布时间】:2016-01-16 18:03:04 【问题描述】:

所以,我正在编写基于谷歌服务(Real-time Multiplayer)的实时多人游戏。我想为自动匹配标准添加不同的角色。在谷歌文档中它看起来像这样:

如果您的游戏有多个玩家角色(例如农民、弓箭手和巫师),并且您希望将自动匹配的游戏限制为每个角色的一个玩家,请在您的房间配置中添加专用位掩码。使用此选项进行自动匹配时,仅当玩家的独占位掩码的逻辑与等于 0 时才会考虑匹配。以下示例显示了如何使用位掩码执行与三个独占角色的自动匹配:

在此示例中,我们将等待 2 个具有专属角色的随机对手。

private static final long ROLE_FARMER = 0x1; // 001 in binary
private static final long ROLE_ARCHER = 0x2; // 010 in binary
private static final long ROLE_WIZARD = 0x4; // 100 in binary

    private void startQuickGame(long role) 
        // auto-match with two random auto-match opponents of different roles
        Bundle am = RoomConfig.createAutoMatchCriteria(2, 2, role);

        // build the room config
        RoomConfig.Builder roomConfigBuilder = makeBasicRoomConfigBuilder();
        roomConfigBuilder.setAutoMatchCriteria(am);

        // create room, etc.
        // ...
    

当我将独占角色替换为 0 时,它可以正常工作。但是,如果我为每个对手添加一些位掩码,例如 0x1,它就不起作用了。玩家不连接到房间。我用 google 实时多人游戏示例测试了这个问题:https://github.com/playgameservices/android-basic-samples/tree/master/BasicSamples/ButtonClicker 它也不起作用。你能帮我解决这个问题吗?我解决不了。

【问题讨论】:

如果你给所有对手相同的位掩码,那么你只得到其中一个肯定是正确的吗? @Tommy 如果我提供相同的位掩码,玩家将无法连接到房间。但我希望每个位掩码为 0x1 的玩家可以连接到具有相同位掩码的玩家的房间。 【参考方案1】:

所以,我解决了我的问题。如果您想将玩家与特定选项联系起来。你需要使用 roomConfigBuilder.setVariant(0x4);

【讨论】:

以上是关于来自谷歌服务的实时多人游戏问题(为您的房间配置添加专属位掩码)的主要内容,如果未能解决你的问题,请参考以下文章

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

Unity 谷歌玩游戏实时消息不发送

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

如何检测客户端是不是故意离开 Google Play 游戏实时多人游戏中的房间?

实时多人房间创建进度卡在 20%

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