TBMP не получает обновления игры, если не очередь игрока - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь включить 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 только когда наступит его черед.Он получает уведомление об обновлении матча, но не может узнать, как выглядят текущие данные игры.

Так ли это должно работать?Я что-то не так делаю?

1 Ответ

0 голосов
/ 17 июня 2018

Одним из способов решения этой проблемы является сохранение всех поворотов внутри данных сообщения.Таким образом, я могу обрабатывать игровые данные как очередь сообщений и воспроизводить все до текущего хода.Это не идеально, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...