gpt4 book ai didi

android - 房间配置在 Android 的谷歌实时多人游戏服务中无法正常工作

转载 作者:行者123 更新时间:2023-11-29 14:15:37 26 4
gpt4 key购买 nike

我正在尝试构建一个实时多人游戏,现在我正在探索 google 为多人提供的示例游戏。链接是...

https://github.com/playgameservices/android-samples/tree/master/ButtonClicker

问题是当我根据我的要求更改自动匹配条件配置时

void startQuickGame() {
final int MIN_OPPONENTS = 1, MAX_OPPONENTS = 3;
Bundle autoMatchCriteria = RoomConfig.createAutoMatchCriteria(MIN_OPPONENTS,
MAX_OPPONENTS, 0);
RoomConfig.Builder rtmConfigBuilder = RoomConfig.builder(this);
rtmConfigBuilder.setMessageReceivedListener(this);
rtmConfigBuilder.setAutoMatchCriteria(autoMatchCriteria);
rtmConfigBuilder.setRoomStatusUpdateListener(this);

getGamesClient().createRoom(rtmConfigBuilder.build());
}

然后此代码不等待房间中的第 3 名或第 4 名玩家(正如我在 MAX_OPPONENTS 中设置的那样),游戏立即开始,有 2 名玩家(1 名对手)。我想在这里添加计时器,游戏在指定时间后开始。

令人惊讶的是,在创建房间后,MIN_PLAYER 值在默认房间 UI 的代码中根本不起作用。

   final int MIN_PLAYERS = 2;
Intent i = getGamesClient().getRealTimeWaitingRoomIntent(room, MIN_PLAYERS);

// show waiting room UI
startActivityForResult(i, RC_WAITING_ROOM);

我的要求是,在创建房间后,我想等待一个特定的时间,然后游戏开始与加入的玩家一起。不管他们是 2 , 3 还是 4

最佳答案

自动匹配算法不会非常努力地最大化匹配中的玩家数量——如果您将最小值设置为 1 并将最大值设置为 3,则可以进行 2 人游戏。

在这种情况下,您应该做的是将 MIN_OPPONENTS 和 MAX_OPPONENTS 设置为 3,并从您的代码中处理游戏开始逻辑。

如果你想实现这个定时器逻辑,你不能使用我们内置的等候室UI,因为它不支持根据时间提前开始游戏。因此,改为使用以下逻辑实现您自己的等候室:

  1. 开始计时。

  2. 当您看到对等点通过 onPeerConnected() 和 onPeerDisconnected() 以及其他回调连接或断开连接时,在屏幕上显示进度。请参阅 RoomStatusListener 和 RoomStatusUpdateListener。

  3. 当计时器到期时,决定您要做什么。例如,如果有 2 个以上的玩家连接,则开始游戏。如果没有,请等待更长时间,放弃等。

  4. 处理有人迟到的情况。如果有 2 名玩家加入,计时器到期,游戏开始,然后第 3 名或第 4 名玩家出现,就会发生这种情况。确保体验对他们来说并不糟糕(不要只是把他们踢出去):-) 如果你不能将他们整合到正在进行的游戏中,你可以让他们保持“旁观者模式”并加入下一轮/匹配/等

重要提示:请记住,不同玩家的计时器在上面的逻辑中不会同步——所以当您决定开始游戏时,您应该向所有同伴发送实时可靠的消息,让他们知道游戏开始,他们应该移动到游戏屏幕。

如果逻辑变得更复杂,选择一个“服务器”可能是有意义的。例如,您可以说具有最低参与者 ID(按字典顺序)的客户端是服务器。说“谁创造了游戏就是服务器”是不行的,因为在自动匹配时,每个人都认为他们创造了游戏。

希望对您有所帮助!

关于android - 房间配置在 Android 的谷歌实时多人游戏服务中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com