2016-07-29 2 views
0

Я пытаюсь изучить Службы игр Google Play, и у меня возникают проблемы с Games.RealTimeMultiplayer.getWaitingRoomIntent. Предполагается ли он показывать намерение для всех пользователей, которые были приглашены?Параметр «Начало воспроизведения» не отображается, когда я вызываю Games.RealTimeMultiplayer.getWaitingRoomIntent

Я в состоянии отобразить выбор игрока и после выбора игрока, я называю

Intent intent = Games.RealTimeMultiplayer.getWaitingRoomIntent(mGoogleApiClient, room, 1); 
     startActivityForResult(intent, RC_WAITING_ROOM); 

внутри onRoomCreated, а также отображается по умолчанию зал ожидания Намерение, но только на устройстве игрока, создавшего комната. Но после этого я ничего не получаю от каких-либо обратных вызовов.

Вот мой код:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    textView = (TextView) findViewById(R.id.textView); 
    textViewMessages = (TextView) findViewById(R.id.textViewMessages); 

    buttonStartMatch = (Button) findViewById(R.id.buttonStartMatch); 
    buttonStartMatch.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      switch (view.getId()) { 
       case R.id.buttonStartMatch: 
        Intent intent = Games.RealTimeMultiplayer.getSelectOpponentsIntent(mGoogleApiClient, 1, 7, true); 
        startActivityForResult(intent, RC_SELECT_OPPONENT); 
        break; 
      } 
     } 
    }); 

    // Create the Google Api Client with access to the Play Games services 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Games.API) 
      .addScope(Games.SCOPE_GAMES) 
      .build(); 
} 



@Override 
protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    mGoogleApiClient.disconnect(); 
} 



protected void onActivityResult(int requestCode, int resultCode, 
           Intent data) { 
    switch (requestCode) { 
     case RC_SIGN_IN: 
      mSignInClicked = false; 
      mResolvingConnectionFailure = false; 
      if (resultCode == RESULT_OK) { 
       Log.i("RC_SIGN_IN", "OK"); 
       mGoogleApiClient.connect(); 
      } else { 
       Log.i("RC_SIGN_IN", "FAILED"); 
      } 
      break; 
     case RC_RESOLVE_ERROR: 
      if (resultCode == RESULT_OK) { 
       Log.i("RC_RESOLVE_ERROR", "OK"); 
       textView.setText(""); 
       mGoogleApiClient.connect(); 
      } 
      else { 
       Log.i("RC_RESOLVE_ERROR", "FAILED"); 
      } 
      break; 
     case RC_SELECT_OPPONENT: 
      if (resultCode != Activity.RESULT_OK) { 
       // user canceled 
       return; 
      } 

      // get the invitee list 
      final ArrayList<String> invitees = 
        data.getStringArrayListExtra(Games.EXTRA_PLAYER_IDS); 

      // get auto-match criteria 
      Bundle autoMatchCriteria = null; 
      int minAutoMatchPlayers = 
        data.getIntExtra(Multiplayer.EXTRA_MIN_AUTOMATCH_PLAYERS, 0); 
      int maxAutoMatchPlayers = 
        data.getIntExtra(Multiplayer.EXTRA_MAX_AUTOMATCH_PLAYERS, 0); 

      if (minAutoMatchPlayers > 0) { 
       autoMatchCriteria = RoomConfig.createAutoMatchCriteria(
         minAutoMatchPlayers, maxAutoMatchPlayers, 0); 
      } else { 
       autoMatchCriteria = null; 
      } 

      // create the room and specify a variant if appropriate 
      RoomConfig.Builder roomConfigBuilder = makeBasicRoomConfigBuilder(); 
      roomConfigBuilder.addPlayersToInvite(invitees); 
      if (autoMatchCriteria != null) { 
       roomConfigBuilder.setAutoMatchCriteria(autoMatchCriteria); 
      } 
      RoomConfig roomConfig = roomConfigBuilder.build(); 
      Games.RealTimeMultiplayer.create(mGoogleApiClient, roomConfig); 

      // prevent screen from sleeping during handshake 
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

      break; 

     case RC_WAITING_ROOM: 
      if (resultCode == RESULT_OK) { 
       Log.i("RC_WAITING_ROOM", "START GAME!!!!"); 
      } 
      else if (resultCode == RESULT_CANCELED) { 
       Log.i("RC_WAITING_ROOM", "USER CANCELLED"); 
      } 
      else if (resultCode == GamesActivityResultCodes.RESULT_LEFT_ROOM) { 
       Log.i("RC_WAITING_ROOM", "USER LEFT THE ROOM"); 
      } 
      break; 
    } 
} 











// create a RoomConfigBuilder that's appropriate for your implementation 
private RoomConfig.Builder makeBasicRoomConfigBuilder() { 
    return RoomConfig.builder(new OnRoomUpdateListener()) 
      .setMessageReceivedListener(new OnMessageReceivedListener()) 
      .setRoomStatusUpdateListener(new OnRoomStatusUpdateListener()); 
} 






private class OnRoomUpdateListener implements RoomUpdateListener { 
    @Override 
    public void onRoomCreated(int statusCode, Room room) { 
     Log.i("ROOM CREATED", room.toString()); 
     if (statusCode != GamesStatusCodes.STATUS_OK) { 
      Log.i("ROOM CREATED ERROR", statusCode + ""); 
     } 

     Intent intent = Games.RealTimeMultiplayer.getWaitingRoomIntent(mGoogleApiClient, room, 1); 
     startActivityForResult(intent, RC_WAITING_ROOM); 
    } 

    @Override 
    public void onJoinedRoom(int statusCode, Room room) { 
     Log.i("JOINED ROOM", "JOINED ROOM"); 
     if (statusCode != GamesStatusCodes.STATUS_OK) { 
      Log.i("JOINED ROOM ERROR", statusCode + ""); 
     } 

     Intent intent = Games.RealTimeMultiplayer.getWaitingRoomIntent(mGoogleApiClient, room, 1); 
     startActivityForResult(intent, RC_WAITING_ROOM); 
    } 

    @Override 
    public void onLeftRoom(int statusCode, String s) { 
     Log.i("LEFT ROOM", "LEFT ROOM"); 
     if (statusCode != GamesStatusCodes.STATUS_OK) { 
      Log.i("LEFT ROOM ERROR", statusCode + ""); 
     } 
    } 

    @Override 
    public void onRoomConnected(int statusCode, Room room) { 
     Log.i("ROOM CONNECTED", "ROOM CONNECTED"); 
     if (statusCode != GamesStatusCodes.STATUS_OK) { 
      Log.i("ROOM CONNECTED ERROR", statusCode + ""); 
     } 
    } 
} 






private class OnRoomStatusUpdateListener implements RoomStatusUpdateListener { 

    @Override 
    public void onRoomConnecting(Room room) { 
     Log.i("ROOM CONNECTING", "ROOM CONNECTING"); 
    } 

    @Override 
    public void onRoomAutoMatching(Room room) { 
     Log.i("AUTO MATCHING", "AUTO MATCHING"); 
    } 

    @Override 
    public void onPeerInvitedToRoom(Room room, List<String> list) { 
     Log.i("PEER INVITED", "PEER INVITED"); 
    } 

    @Override 
    public void onPeerDeclined(Room room, List<String> list) { 
     Log.i("PEER DECLINED", "PEER DECLINED"); 
    } 

    @Override 
    public void onPeerJoined(Room room, List<String> list) { 
     Log.i("PEER JOINED", "PEER JOINED"); 
    } 

    @Override 
    public void onPeerLeft(Room room, List<String> list) { 
     Log.i("PEER LEFT", "PEER LEFT"); 
    } 

    @Override 
    public void onConnectedToRoom(Room room) { 
     Log.i("CONNECTED TO ROOM", "CONNECTED TO ROOM"); 
    } 

    @Override 
    public void onDisconnectedFromRoom(Room room) { 
     Log.i("DISCONNECTED FROM ROOM", "DISCONNECTED FROM ROOM"); 
    } 

    @Override 
    public void onPeersConnected(Room room, List<String> list) { 
     Log.i("PEERS CONNECTED", "PEERS CONNECTED"); 
    } 

    @Override 
    public void onPeersDisconnected(Room room, List<String> list) { 
     Log.i("PEERS DISCONNECTED", "PEERS DISCONNECTED"); 
    } 

    @Override 
    public void onP2PConnected(String s) { 
     Log.i("P2P CONNECTED", "P2P CONNECTED"); 
    } 

    @Override 
    public void onP2PDisconnected(String s) { 
     Log.i("P2P DISCONNECTED", "P2P DISCONNECTED"); 
    } 
} 





private class OnMessageReceivedListener implements RealTimeMessageReceivedListener { 

    @Override 
    public void onRealTimeMessageReceived(RealTimeMessage realTimeMessage) { 
     Log.i("REAL TIME MESSAGE", realTimeMessage.toString()); 
    } 
} 
+0

Может ли кто-нибудь помочь, пожалуйста, –

ответ

0

Как уже упоминалось в Optional: Adding a waiting room UI,

Второй параметр в getWaitingRoomIntent() указывает число игроков, которые должны быть подключены в комнате перед Начать играть вариант отображается. В этом примере мы указываем MAX_VALUE, который указывает, что параметр Начало воспроизведения никогда не отображается. Вместо этого пользовательский интерфейс ожидания автоматически выходит, когда все игроки подключены.

Больше информации и примеры кодов можно найти в Adding Real-time Multiplayer Support to Your Android Game и проходит через RealTimeMultiplayer будет полезно тоже.

+0

От какого ответа я узнаю Если есть приглашение для меня? –

Смежные вопросы