我尝试开发多人游戏。但是,当它显示等候室活动时,与其他玩家没有任何联系。我和朋友的手机一起试试,两人都被困在等候室。我忘记了代码中的内容吗?请告诉我。 id和Developer Console设置正常。
public class ActivityLogin extends Activity implements
View.OnClickListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
RoomUpdateListener,
RealTimeMessageReceivedListener,
RoomStatusUpdateListener {
(game variables)
private byte[] my_send_msg = new byte[2];
private final static int[] SCREENS = {R.id.login_screen, R.id.wait_screen, R.id.game_screen};
private final static int[] CLICKABLES = {
R.id.start_game, R.id.sign_out_button, R.id.sign_in_button};
private GoogleApiClient mGoogleApiClient;
private final static int RC_SIGN_IN = 9001;
private final static int RC_WAITING_ROOM = 10002;
private boolean mResolvingConnectionFailure = false;
private boolean mAutoStartSignInFlow = true;
private boolean mSignInClicked = false;
private String mRoomId = null;
private ArrayList<Participant> mParticipants = null;
private String mMyId = null;
private int mCurScreen = -1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
for (int id : CLICKABLES) {
findViewById(id).setOnClickListener(this);
}
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Games.API).addScope(Games.SCOPE_GAMES)
.build();
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == RC_SIGN_IN) {
mSignInClicked = false;
mResolvingConnectionFailure = false;
if (resultCode == RESULT_OK) {
mGoogleApiClient.connect();
} else {
BaseGameUtils.showActivityResultError(this, requestCode, resultCode, R.string.signin_failure);
}
}
if (requestCode == RC_WAITING_ROOM) {
if (resultCode == Activity.RESULT_OK) {
switchToScreen(R.id.game_screen);
} else if (resultCode == GamesActivityResultCodes.RESULT_LEFT_ROOM) {
switchToScreen(R.id.login_screen);
} else if (resultCode == Activity.RESULT_CANCELED) {
switchToScreen(R.id.login_screen);
}
}
super.onActivityResult(requestCode, resultCode, intent);
}
public void startQuickGame() {
Bundle am = RoomConfig.createAutoMatchCriteria(1, 1, 0);
RoomConfig.Builder rtmConfigBuilder = RoomConfig.builder(this);
rtmConfigBuilder.setMessageReceivedListener(this);
rtmConfigBuilder.setRoomStatusUpdateListener(this);
rtmConfigBuilder.setAutoMatchCriteria(am);
Games.RealTimeMultiplayer.create(mGoogleApiClient, rtmConfigBuilder.build());
switchToScreen(R.id.wait_screen);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent e) {
if (keyCode == KeyEvent.KEYCODE_BACK && mCurScreen == R.id.game_screen) {
leaveRoom();
return true;
}
return super.onKeyDown(keyCode, e);
}
public void leaveRoom() {
if (mRoomId != null) {
Games.RealTimeMultiplayer.leave(mGoogleApiClient, this, mRoomId);
mRoomId = null;
switchToScreen(R.id.wait_screen);
} else {
switchToScreen(R.id.login_screen);
}
}
public void showWaitingRoom(Room room) {
Intent i = Games.RealTimeMultiplayer.getWaitingRoomIntent(mGoogleApiClient, room, Integer.MAX_VALUE);
startActivityForResult(i, RC_WAITING_ROOM);
}
@Override
public void onConnected(@Nullable Bundle connectionHint) {
switchToScreen(R.id.login_screen);
}
@Override
public void onConnectionSuspended(int i) {
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
if (mResolvingConnectionFailure) {
return;
}
if (mSignInClicked || mAutoStartSignInFlow) {
mAutoStartSignInFlow = false;
mSignInClicked = false;
mResolvingConnectionFailure = BaseGameUtils.resolveConnectionFailure(this, mGoogleApiClient, connectionResult,
RC_SIGN_IN, getResources().getString(R.string.signin_other_error));
}
switchToScreen(R.id.login_screen);
}
public void showGameError() {
BaseGameUtils.makeSimpleDialog(this, getString(R.string.game_problem));
switchToScreen(R.id.login_screen);
}
@Override
public void onRoomCreated(int statusCode, Room room) {
if (statusCode != GamesStatusCodes.STATUS_OK) {
showGameError();
return;
}
mRoomId = room.getRoomId();
showWaitingRoom(room);
}
@Override
public void onRoomConnected(int statusCode, Room room) {
if (statusCode != GamesStatusCodes.STATUS_OK) {
showGameError();
return;
}
updateRoom(room);
}
@Override
public void onLeftRoom(int i, String s) {
switchToScreen(R.id.login_screen);
}
@Override
public void onJoinedRoom(int statusCode, Room room) {
if (statusCode != GamesStatusCodes.STATUS_OK) {
return;
}
showWaitingRoom(room);
}
@Override
public void onPeerDeclined(Room room, List<String> arg1) {
updateRoom(room);
}
@Override
public void onPeerInvitedToRoom(Room room, List<String> arg1) {
updateRoom(room);
}
@Override
public void onP2PDisconnected(String participant) {
}
@Override
public void onP2PConnected(String participant) {
}
@Override
public void onPeerJoined(Room room, List<String> arg1) {
updateRoom(room);
}
@Override
public void onPeerLeft(Room room, List<String> peersWhoLeft) {
updateRoom(room);
}
@Override
public void onRoomAutoMatching(Room room) {
updateRoom(room);
}
@Override
public void onRoomConnecting(Room room) {
updateRoom(room);
}
@Override
public void onPeersConnected(Room room, List<String> peers) {
updateRoom(room);
}
@Override
public void onPeersDisconnected(Room room, List<String> peers) {
updateRoom(room);
}
public void updateRoom(Room room) {
if (room != null) {
mParticipants = room.getParticipants();
}
}
@Override
public void onConnectedToRoom(Room room) {
mParticipants = room.getParticipants();
mMyId = room.getParticipantId(Games.Players.getCurrentPlayerId(mGoogleApiClient));
if (mRoomId == null) {
mRoomId = room.getRoomId();
}
}
@Override
public void onDisconnectedFromRoom(Room room) {
mRoomId = null;
showGameError();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
mSignInClicked = true;
mGoogleApiClient.connect();
break;
case R.id.sign_out_button:
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
Games.signOut(mGoogleApiClient);
mGoogleApiClient.disconnect();
}
mSignInClicked = false;
break;
case R.id.start_game:
startQuickGame();
break;
}
@Override
public void onStop() {
leaveRoom();
if (mGoogleApiClient == null || !mGoogleApiClient.isConnected()) {
switchToScreen(R.id.login_screen);
} else {
switchToScreen(R.id.wait_screen);
}
super.onStop();
mGoogleApiClient.disconnect();
}
@Override
public void onStart() {
switchToScreen(R.id.wait_screen);
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
Toast.makeText(this, "client was already connected", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Connecting client", Toast.LENGTH_SHORT).show();
mGoogleApiClient.connect();
}
super.onStart();
}
void switchToScreen(int screenId) {
for (int id : SCREENS) {
findViewById(id).setVisibility(screenId == id ? View.VISIBLE : View.GONE);
}
mCurScreen = screenId;
}
public void broadcastData(String s, int x) {
if (s.equals("S")) {
my_send_msg[0] = (int) -1;
} else if (s.equals("O")) {
my_send_msg[0] = (int) -2;
}
my_send_msg[1] = (byte) x;
for (Participant p : mParticipants) {
if (p.getParticipantId().equals(mMyId))
continue;
if (p.getStatus() != Participant.STATUS_JOINED)
continue;
Games.RealTimeMultiplayer.sendUnreliableMessage(mGoogleApiClient, my_send_msg, mRoomId, p.getParticipantId());
}
}
@Override
public void onRealTimeMessageReceived(RealTimeMessage rtm) {
byte[] b = rtm.getMessageData();
int temp_GRAMMA = (int) b[0];
String GRAMMA = "";
if (temp_GRAMMA == -1) {
GRAMMA = "S";
} else if (temp_GRAMMA == -2) {
GRAMMA = "O";
}
int KOUMPI = (int) b[1];
......................(other code)
}
................................(game code and methods)