java - Google Play 多人游戏 : No connection to other players

标签 java android google-play-services google-play-games google-play-developer-api

我目前正在使用 Google Play 多人游戏服务开发一款游戏。一切正常,例如登录 Google+、排行榜和成就。
现在我尝试添加多人游戏功能(通过 Google Play 游戏网络)。我的代码不会抛出任何异常,它只是不起作用。
我的应用程序的唯一 logcat 输出是“已创建”(private void startQuickGame () { )。

public class GameExplorerQuickGame extends Activity implements RoomUpdateListener, RoomStatusUpdateListener {
  private GoogleApiClient client = RXTXChooser.mGoogleApiClient;
  private Room room;
  final static int RC_WAITING_ROOM  = 10002;

  @Override
  public void onCreate (Bundle b) {
    super.onCreate(b);

    if (!this.client.isConnected()) this.client.connect();

    startQuickGame();

  }

  private void startQuickGame () {
    Bundle am = RoomConfig.createAutoMatchCriteria(1, 1, 0);

    RoomConfig.Builder roomConfigBuilder = makeBasicRoomConfigBuilder();
    roomConfigBuilder.setAutoMatchCriteria(am);
    RoomConfig roomConfig = roomConfigBuilder.build();

    Games.RealTimeMultiplayer.create(this.client, roomConfig);
    System.out.println("created");     // printed into logcat
  }

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

  @Override
  public void onRoomConnected (int statusCode, Room room) {
    this.room = room;
    System.out.println("onRoomConnected");
    if (statusCode != GamesStatusCodes.STATUS_OK) {
    } else {
        //starting Game Activity...
    }
  }
  @Override
  public void onJoinedRoom (int statusCode, Room room) {
    this.room = room;
    System.out.println("onJoinedRoom");
    if (statusCode != GamesStatusCodes.STATUS_OK) {
         return;
    }

    Intent i = Games.RealTimeMultiplayer.getWaitingRoomIntent(this.client, room, Integer.MAX_VALUE);
    startActivityForResult(i, RC_WAITING_ROOM);
  }

  @Override
  public void onRoomCreated (int statusCode, Room room) {
    this.room = room;
    System.out.println("onRoomCreated()");
    if (statusCode != GamesStatusCodes.STATUS_OK) {
        return;
    }
    // get waiting room intent
    Intent i = Games.RealTimeMultiplayer.getWaitingRoomIntent(this.client, room, Integer.MAX_VALUE);
    startActivityForResult(i, RC_WAITING_ROOM);
  }
  @Override
  public void onActivityResult (int request, int response, Intent intent) {
    if (request == RC_WAITING_ROOM) {
        if (response == Activity.RESULT_OK) {
            //starting Game Activity...
        } else if (response == Activity.RESULT_CANCELED) {

            Games.RealTimeMultiplayer.leave(this.client, null, this.room.getRoomId());

        } else if (response == GamesActivityResultCodes.RESULT_LEFT_ROOM) {
            Games.RealTimeMultiplayer.leave(this.client, null, this.room.getRoomId());
        }
    }
  }

  @Override
  public void onConnectedToRoom (Room arg0) {
    System.out.println("onConnectedToRoom");
    this.room = arg0;
  }

  @Override
  public void onDisconnectedFromRoom (Room room) {
    this.room = room;
    System.out.println("onDisconnectedFromRoom");
    Games.RealTimeMultiplayer.leave(this.client, null, room.getRoomId());
  }
  // are we already playing?
  boolean               mPlaying    = false;

  final static int  MIN_PLAYERS = 2;

  // returns whether there are enough players to start the game
  boolean shouldStartGame (Room room) {
    int connectedPlayers = 0;
    for (Participant p: room.getParticipants()) {
        if (p.isConnectedToRoom()) ++connectedPlayers;
    }
    return connectedPlayers >= MIN_PLAYERS;
  }

  // Returns whether the room is in a state where the game should be canceled.
  boolean shouldCancelGame (Room room) {
    for (Participant p: room.getParticipants()) {
        //          if (!p.isConnectedToRoom()) return true;
    }
    return false;
  }

  @Override
  public void onPeersConnected (Room room, List<String> peers) {
    System.out.println("onPeersConnected. List.size= " + peers.size());
    if (this.mPlaying) {
    } else if (shouldStartGame(room)) {
    }
  }

  @Override
  public void onPeersDisconnected (Room room, List<String> peers) {
    this.room = room;
    System.out.println("onPeersDisconnected");
    if (this.mPlaying) {
    } else if (shouldCancelGame(room)) {
        Games.RealTimeMultiplayer.leave(this.client, null, this.room.getRoomId());
    }
  }

  @Override
  public void onPeerLeft (Room room, List<String> peers) {
    this.room = room;
    System.out.println("onPeerLeft");
    if (!this.mPlaying && shouldCancelGame(room)) {
        Games.RealTimeMultiplayer.leave(this.client, null, this.room.getRoomId());
    }
  }

  @Override
  public void onPeerDeclined (Room room, List<String> peers) {
    this.room = room;
    if (!this.mPlaying && shouldCancelGame(room)) {
        Games.RealTimeMultiplayer.leave(this.client, null, this.room.getRoomId());
    }
  }

  @Override
  public void onP2PConnected (String arg0) {
    System.out.println("onP2PConnected");
  }

  @Override
  public void onP2PDisconnected (String arg0) {
    System.out.println("onP2PDisconnected");
  }
  @Override
  public void onPeerInvitedToRoom (Room arg0, List<String> arg1) {
    System.out.println("onPeerInvitedRoom");
    this.room = arg0;
  }

  @Override
  public void onPeerJoined (Room arg0, List<String> arg1) {
    System.out.println("onPeerJoined");
    this.room = arg0;
  }

  @Override
  public void onRoomAutoMatching (Room arg0) {
    System.out.println("onRoomAutoMatching");
    this.room = arg0;
  }

  @Override
  public void onRoomConnecting (Room arg0) {
    System.out.println("onRoomCeonnecting");
    this.room = arg0;
  }

  @Override
  public void onLeftRoom (int arg0, String arg1) {
    System.out.println("onLeftRoom");
  }
}

最佳答案

我找到了解决方案!

我忘记添加在线:

私有(private)无效startQuickGame(){ //跳过一些行... RoomConfig.Builder roomConfigBuilder = makeBasicRoomConfigBuilder(); roomConfigBuilder.setAutoMatchCriteria(am); roomConfigBuilder.setRoomStatusUpdateListener(this);//我忘记了这一行 RoomConfig roomConfig = roomConfigBuilder.build(); //跳过一些行... }


并且 googleAPIClient 由于某种奇怪的原因而被注销

关于java - Google Play 多人游戏 : No connection to other players,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31415863/

相关文章:

java - JPanel不会出现在JFrame(主类)中 - 初级Java

android - 如何在Android模拟器中安装Google Play Service 7.3.0或以上版本?

android - 版本冲突更新为Play-Services 9.4.0 Android Studio 2.2

java - 我想在 TextView 中添加字符串

Android Fused Location API - 如何在一个应用程序中使用 PRIORITY_BALANCED_POWER_ACCURACY 和 PRIORITY_HIGH_ACCURACY?

Java:足够的空闲堆来创建一个对象?

java - 没有 EJB 就不能做什么

java - 在Java中使用Hashmap with set读取大文件(20G)——Java堆空间

java - 从 Google Map 获取结果并将数据传输回之前的 fragment

android - 使用自定义类填充 ListView