use*_*654 2 android google-play-games
我有一些问题在文档中没有得到解答:https://developers.google.com/games/services/android/multiplayer
RoomConfig.createAutoMatchCriteria(1, 3, 0)不按预期工作.它只会尝试匹配一个2人游戏,永远不会是3,而永远不会是4.我只有3个设备,但我花了2个小时试图匹配设备,他们只是成对完成.我读过这篇文章:谷歌多人游戏中的自动匹配标准示例BittonClicker Game for android有类似的问题.也GamesClient.getSelectPlayersIntent(1, 3)有同样的错误.
GamesClient.getRealTimeWaitingRoomIntent(room, 0)不按预期工作.文档说明"如果连接的参与者数量大于或等于指定的最小值以启动游戏,则启用等候室UI中的"开始播放"选项.但是在测试时我还没有看到"开始播放"选项.发生的情况是,在弹出"准备播放"消息后第一个人连接时,等候室会自动退出.从0更改为1具有相同的效果,更改为Integer.MAX_VALUE.任何人都可以提供实现预期功能的方法吗?我在这里做错了吗?
我在Android上玩了一些多人游戏,用户加入,然后离开,其他人取代他们的位置.无论我假设哪些参数用于自动匹配,我都无法在测试中看到这一点.如果一名球员离开了一个房间,另一名球员会来填补他的位置吗?如果是这样,`Room.getParticipantIds().size()会返回一个大于4的数字吗?
在其中一些游戏中,一旦游戏开始,没有其他人加入.我测试了这些游戏,有一次我没有找到我加入了一个房间,并被告知它正在进行中.他们是否以某种方式告诉服务器游戏已经开始而不是与其他玩家匹配?其他玩家如何才加入尚未开始的游戏?(这些游戏正在使用Google Play游戏服务)
我有其他问题,但我不想问不必要的问题.这些问题会非常有用,如果得到回答,会大大减轻我的压力.
感谢您的时间.
1)这与谷歌打算完全一样.没有保证,如果你使用createAutoMatchCriteria(1,3,0)将为你的游戏找到3个对手.在我的测试中,(4个设备一次请求)90%或更多的时间它将成为2个开始的2场比赛.只有当我有一个设备邀请朋友或手动选择AutoPick时,才有机会大幅增加3或4个玩家的游戏开始(否则,纯AutoMatch导致2和2行为)
2)如果我理解了正确的行为,你会得到一个离开候诊室的玩家(通常是首先启动的设备),然后另一个玩家加入,但第一个玩家离开等候室,另一个留在其中?如果是这样,那么您需要确保使用以下内容(我在onRoomConnected中执行此操作
try {
bWaitRoomDismissedFromCode = true;
finishActivity(RC_WAITING_ROOM);
} catch (Exception e) {
dLog("would have errored out in waiting room");
}
Run Code Online (Sandbox Code Playgroud)
然后,这将关闭等候室中等待的任何玩家的等候室,并让他们回到您的活动中.从下面,如果你想要"开始播放"的行为,这只有在有邀请的玩家已经接受邀请进入房间时.(如果谷歌意味着它以另一种方式为AutoMatch工作,他们还没有在那里工作)
public Intent getRealTimeWaitingRoomIntent(Room room,int minParticipantsToStart)
返回一个意图,它将显示一个"等候室"屏幕,显示参与者加入实时多人房间的进度.请注意,必须使用startActivityForResult(Intent,int)调用此方法,以便可以建立调用包的标识.
如果已经连接了必要数量的对等体并且现在可以开始游戏,或者如果用户明确要求立即开始游戏,则活动结果将为RESULT_OK.如果用户在没有采取任何操作的情况下退出等候室屏幕,则结果将为RESULT_CANCELED.如果用户明确选择离开房间,结果将为RESULT_LEFT_ROOM.
无论结果代码是什么,等待室活动将返回包含EXTRA_ROOM中的Room对象的数据意图,该对象表示您最初作为参数传递的Room的当前状态.
如果需要,等待室可以允许用户甚至在房间完全连接之前开始玩游戏.这由minParticipantsToStart参数控制:如果至少有多个参与者(包括当前玩家)连接到房间,则在等候室UI中将启用"开始播放"菜单项.将minParticipantsToStart设置为0意味着"开始播放"将始终可用,并且值MAX_VALUE将完全禁用该项目.注意:如果您允许用户提前启动,则需要通过明确告知其他连接的对等方现在开始游戏来处理这种情况; 有关详细信息,请参阅开发人员文档
最后,请注意,候诊室本身永远不会明确采取任何行动来改变房间或其参与者的状态.因此,如果活动结果为RESULT_LEFT_ROOM,则调用者有责任实际离开房间.或者如果结果是RESULT_CANCELED,则调用者有责任仔细检查房间的当前状态并决定是开始游戏,继续等待还是做其他事情.但需要注意的是,虽然候车室是活动的,房间的状态将作为参与者接受或拒绝邀请,和参与者的数量甚至可能改变为自动匹配的玩家得到补充改变.
3)Google Play游戏服务(用于自动匹配)没有此行为.只有一个房间的所有参与者都发现由服务器选择,将在房实际上可以连接(onRoomCreated并不意味着对于通信的房间已经设置,它为玩家加入,如果他们正在等待其他人加入...并且一旦服务具有所有其他玩家就可以切换onRoomConnected是对所有连接的玩家的最后一次呼叫,并表示会议室准备好传递消息.现在,如果你有不实际的行为,那么行为就会改变,因为你可以看到被邀请者接受,但是如果他们然后离开了房间......没有办法让它被AutoMatch填充,但你可以看到他们离开. ..(多好啊?)
4)如果游戏正在使用GPGS,那么一旦创建了房间并将其转到onRoomConnected舞台,它就会被播放,并且不能再与该房间进行匹配.所以当你加入一个房间时,其他人都在同一时间加入.因此,当玩家离开时,没有其他人能够加入.
public abstract void onRoomConnected(int statusCode,Room room)
当实时房间中的所有参与者完全连接时调用.一旦所有邀请被接受并且任何必要的自动匹配已经完成,就会调用此方法.可能的状态代码包括:
STATUS_OK如果数据已成功加载并且是最新的.如果客户端需要重新连接到服务以访问此数据,则STATUS_CLIENT_RECONNECT_REQUIRED.如果服务中发生意外错误,则STATUS_INTERNAL_ERROR.参数room完全连接的房间对象.如果无法成功加载,则该空间可以为null.
| 归档时间: |
|
| 查看次数: |
2978 次 |
| 最近记录: |