Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Google Play实时多人游戏问题_Android_Google Play Games - Fatal编程技术网

Android Google Play实时多人游戏问题

Android Google Play实时多人游戏问题,android,google-play-games,Android,Google Play Games,我有一些文档中没有回答的问题: RoomConfig.createAutoMatchCriteria(1,3,0)无法正常工作。它只会尝试匹配2人游戏,而不是3人游戏和4人游戏。我只有3台设备,但我花了大约2个小时尝试匹配这些设备,它们只能成对完成。我读了这篇文章:它也有类似的问题。另外GamesClient.getSelectPlayerContent(1,3)也有相同的错误 GamesClient.getRealTimeWaitingRoomIntent(房间,0)无法按预期工作。文档中指出

我有一些文档中没有回答的问题:

  • RoomConfig.createAutoMatchCriteria(1,3,0)
    无法正常工作。它只会尝试匹配2人游戏,而不是3人游戏和4人游戏。我只有3台设备,但我花了大约2个小时尝试匹配这些设备,它们只能成对完成。我读了这篇文章:它也有类似的问题。另外
    GamesClient.getSelectPlayerContent(1,3)
    也有相同的错误

  • GamesClient.getRealTimeWaitingRoomIntent(房间,0)
    无法按预期工作。文档中指出,“如果连接的参与者数量大于或等于启动游戏的指定最小值,则会启用等候室UI中的开始播放选项。”但是,在测试后,我还没有看到“开始播放”选项。发生的情况是,在弹出“准备播放”消息后,只要第一个人连接,等候室就会自动退出。从0更改为1具有相同的效果,更改为
    Integer.MAX\u值也具有相同的效果。任何人都能提供实现预期功能的方法吗?我做错什么了吗

  • 我在android上玩过一些多人游戏,用户先加入,然后离开,其他人代替他们。我在测试中一直无法看到这一点,无论我为自动化假设了什么参数。如果一个玩家离开一个房间,另一个玩家会来填补他的位置吗?如果是,则`Room.getParticipantIds().size()是否返回大于4的数字

  • 在这些游戏中,一旦游戏开始,就没有其他人加入。我已经测试了这些游戏,没有一次发现我加入了一个房间,并被告知它正在进行中。他们是否会告诉服务器游戏已经开始,而不是让他们与其他玩家配对?其他玩家如何只加入尚未开始的游戏?(这些游戏使用Google Play游戏服务)

  • 我还有其他问题,但我不想问不必要的问题。这些问题会很有帮助,如果得到回答,会大大减轻我的压力

    感谢您抽出时间。

    1)这正是谷歌想要的。如果您使用createAutoMatchCriteria(1、3、0),则无法保证会为您的游戏找到3个对手。在我的测试中,(4台设备一次请求)90%或更多的时间将成为2个游戏中的2个开始。只有当我有一台设备邀请朋友或手动选择自动选择时,启动3人或4人游戏的机会才会显著增加(否则,纯自动模式会导致2人和2人行为)

    2) 如果我理解正确的话,你会让一个玩家离开等候室(通常是首先启动的设备),然后另一个玩家加入,但是第一个玩家离开等候室,另一个留在里面?如果是这样,那么您需要确保使用以下内容(我在onRoomConnected中执行此操作

    try {
            bWaitRoomDismissedFromCode = true;
            finishActivity(RC_WAITING_ROOM);
        } catch (Exception e) {
            dLog("would have errored out in waiting room");
        }
    
    这将关闭等待室中的所有玩家的等待室,并让他们返回到您的活动中。从下面看,如果您想要“开始播放”的行为,则只有当有已接受邀请的受邀玩家进入该室时,才可以这样做。(如果谷歌想用另一种方式为AutoMatch工作,他们还没有做到这一点)

    公共意图getRealTimeWaitingRoomIntent(Room Room,int minParticipantsToStart)

    返回一个intent,该intent将显示一个“等待室”屏幕,显示参与者加入实时多人游戏室的进度。请注意,必须使用startActivityForResult(intent,int)调用该intent,以便建立调用包的标识

    如果连接了必要数量的对等方并且现在可以开始游戏,或者如果用户明确要求现在开始游戏,则活动结果将是result_OK。如果用户未采取任何行动就跳出等候室屏幕,则结果将被result_取消。如果用户明确选择离开房间,则结果将是result_OK这将是你离开房间的结果

    无论结果代码是什么,等待室活动都将返回一个数据意图,其中包含EXTRA_room中的room对象,该对象表示最初作为参数传递的房间的当前状态

    如果需要,等候室可以允许用户在房间完全连接之前开始玩游戏。这由minParticipantsToStart参数控制:如果至少有那么多参与者(包括当前玩家)连接到房间,则“开始玩”菜单项将在等候室UI中启用。将minParticipantsToStart设置为0表示“开始播放”将始终可用,并且MAX_value的值将完全禁用该项目。注意:如果确实允许用户提前启动,则需要通过明确告知其他连接的对等方游戏正在启动来处理该情况;有关详细信息,请参阅开发人员文档

    最后,请注意,等候室本身不会明确采取任何行动来更改房间或其参与者的状态。因此,如果活动结果为result_LEFT_room,则呼叫者有责任实际离开房间。或者,如果结果为result_Cancelled,则呼叫者有责任重新检查当前的状态请注意,当等待室处于活动状态时,等待室的状态将随着参与者接受或拒绝邀请而改变,参与者的数量甚至可能随着自动匹配玩家的增加而改变

    3) Google Play Game Services(用于自动匹配)没有此行为。只有当服务器找到并选择房间的所有参与者时,才会执行此操作