Я пытаюсь включить TBMP в свою игру в маджонг, и эта проблема застряла у меня в течение нескольких месяцев, и я не приблизился к ее решению.
У меня в игре четыре игрока иигра разворачивается против часовой стрелки.Итак, представьте, что у вас за столом четверо игроков:
Player 3
---------------------------
Player 4 | | Player 2
---------------------------
Player 1
Теперь Игрок 1 делает ход, данные через JSON помещаются в данные игры, а Игрок 2 получает уведомление, что это его ход.Игроки 3 и 4 также получают уведомление о том, что произошло обновление матча, но когда они запрашивают данные игры, он возвращает устаревшую информацию об игре, если только не наступает их очередь, тогда они получают точные и текущие данные игры.
Я бы хотел, чтобы все игроки обновлялись после каждого хода, а не получали все обновления за один раз, когда он становится их ходом.
Я регистрирую слушателя обновлений следующим образом:
mTurnBasedMultiplayerClient.registerTurnBasedMatchUpdateCallback (mMatchUpdateCallback);
У меня есть функция, которая обрабатывает обновление следующим образом:
private TurnBasedMatchUpdateCallback mMatchUpdateCallback = new TurnBasedMatchUpdateCallback() {
@Override
public void onTurnBasedMatchReceived(@NonNull TurnBasedMatch turnBasedMatch) {
int turnStatus = turnBasedMatch.getTurnStatus();
// OK, it's active. Check on turn status.
switch (turnStatus) {
case TurnBasedMatch.MATCH_TURN_STATUS_MY_TURN:
MainActivity.mTurnData =
MahjongTurn.unpersist(turnBasedMatch.getData());
setLocalGameValues();
state = GameState.Playing;
return;
case TurnBasedMatch.MATCH_TURN_STATUS_THEIR_TURN:
MainActivity.mTurnData =
MahjongTurn.unpersist(turnBasedMatch.getData());
setLocalGameValues();
state = GameState.MultiWait;
return;
}
}
@Override
public void onTurnBasedMatchRemoved(@NonNull String matchId) {
game.showToast("A match was removed.");
state = GameState.MultiWait;
return;
}
};
В любом случае, слушатель зарегистрирован правильно, и я могувидите, что мой слушатель вызывается, но вызов turnBasedMatch.getData () возвращает правильные игровые данные только тогда, когда это также ход игрока.
Таким образом, Игрок 4 получает обновления от Игрока 1, Игрока 2 и Игрока3 только когда наступит его черед.Он получает уведомление об обновлении матча, но не может узнать, как выглядят текущие данные игры.
Так ли это должно работать?Я что-то не так делаю?