2014-03-19 147 views
1

我使用Libgdx来管理屏幕,更新和渲染。Google Play多人游戏切换到游戏屏幕Libgdx

当我从WAITING_ROOM获得RESULT_OK时,我开始游戏屏幕,发生以下情况。

    在候车室
  1. ,我可以看到我是谁发起的游戏室
  2. 我可以看到自动匹配的球员谁加入候车室
  3. 当MIN球员都在房间里,我得到“准备玩”
  4. 屏幕被切换到游戏画面

现在的问题。

当新游戏屏幕启动时,其中一个玩家正在显示,另一个玩家显示空白屏幕 有时,空白屏幕会显示在发起游戏的玩家的手机上,以及其他时间显示在玩家手机上加入了房间。

我在做什么错?

见我的代码:

上创建

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

    gameActivity = new GameActivity(this, this); 
    participants = new Array<Player>(); 

    layout = new RelativeLayout(this); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

    gameView = initializeForView(gameActivity); 

     AdRequest adRequest = new AdRequest.Builder() 
     .build(); 
    adView = new AdView(this); 
    adView.setAdSize(AdSize.FULL_BANNER); 
    adView.setAdUnitId(AD_UNIT_ID); 
    adView.loadAd(adRequest); 

    RelativeLayout.LayoutParams gameParams = 
      new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
     gameParams.addRule(RelativeLayout.CENTER_IN_PARENT); 
     gameParams.bottomMargin = 1; 

    adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 
       adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
       adParams.addRule(RelativeLayout.CENTER_IN_PARENT); 

    layout.addView(gameView, gameParams); 
    layout.addView(adView, adParams); 

    if (mHelper == null) { 
     getGameHelper(); 
    } 

    mHelper.setup(this); 

    setContentView(layout); 

} 

开始简单的游戏:

private void startQuickGame(){ 
    Log.d(TAG, "StartQuickGame()"); 

    final int MIN_OPPONENTS = 1, MAX_OPPONENTS = 1; 

    Bundle autoMatch = RoomConfig.createAutoMatchCriteria(MIN_OPPONENTS, 
      MAX_OPPONENTS, 0); 
    RoomConfig.Builder roomBuilder = RoomConfig.builder(this); 
    roomBuilder.setMessageReceivedListener(this); 
    roomBuilder.setRoomStatusUpdateListener(this); 
    roomBuilder.setAutoMatchCriteria(autoMatch); 


    Games.RealTimeMultiplayer.create(getApiClient(), roomBuilder.build()); 

    //prevent screen from sleeping during players matching 

    Log.d(TAG, " startQuickGame()" + "createRoom called"); 

    } 

上创建ROOM

@Override 
public void onRoomCreated(int statusCode, Room room) { 

    Log.d(TAG, "On room created()"); 
    if(statusCode != GamesClient.STATUS_OK){ 
     Log.d(TAG, "On room created() ERROR"); 
     return; 
    } 
    showWaitingRoom(room); 

    } 

在连接到ROOM

@Override 
public void onConnectedToRoom(Room room) { 
    Log.d(TAG, "onConnectedToRoom."); 

     // get room ID, participants and my ID: 
     mRoomId = room.getRoomId(); 
     mParticipants = room.getParticipants(); 
     mMyId = room.getParticipantId(Games.Players.getCurrentPlayerId(getApiClient())); 


     // print out the list of participants (for debug purposes) 
     Log.d(TAG, "Room ID: " + mRoomId); 
     Log.d(TAG, "My ID " + mMyId); 
     Log.d(TAG, "<< CONNECTED TO ROOM>>"); 

} 

SHOW候诊室

void showWaitingRoom(Room room) { 
    // minimum number of players required for our game 
    // For simplicity, we require everyone to join the game before we start it 
    // (this is signaled by Integer.MAX_VALUE). 
    final int MIN_PLAYERS = Integer.MAX_VALUE; 
    Intent i = Games.RealTimeMultiplayer.getWaitingRoomIntent(getApiClient(), room, MIN_PLAYERS); 

    // show waiting room UI 
    startActivityForResult(i, RC_WAITING_ROOM); 
} 

切换到游戏画面

public void startGame(boolean multiPlayer){ 
    Log.d(TAG, "startGame()"); 
    mMultiplayer = multiPlayer; 

    gameActivity.setScreen(new MultiTest(gameActivity)); //Game Screen Libgdx 

    Log.d(TAG, "Switched to MultiTest game screen"); 

} 

回答

0

的最后呼吁所有玩家说,房间准备开始游玩,OnRoomConnected。

使用调用启动你的游戏画面

Google Developer Site

onRoomConnected(INT的StatusCode,客房) 当在实时房间里所有的参与者都是完全连接调用。

如果您使用其他任何内容,可能会产生意想不到的后果。

也,不要忘记关闭编程候车室

@Override 
public void onRoomConnected(int statusCode, Room room) { 
    //dLog("onRoomConnected"); 
    mRoomCurrent = room; 
    mParticipants = room.getParticipants(); 

    mMyID = room.getParticipantId(aHelper.getGamesClient().getCurrentPlayerId()); 
    //dLog("The id is " + mMyID); 

    try { 
     bWaitRoomDismissedFromCode = true; 
     finishActivity(RC_WAITING_ROOM); 
    } catch (Exception e) { 
     //dLog("would have errored out in waiting room"); 
    } 

    aHelper.getGamesClient(); 
    //tell the Game the room is connected 
    if (statusCode == GamesClient.STATUS_OK) { 
     theGameInterface.onRoomConnected(room.getParticipantIds(), mMyID, room.getCreationTimestamp()); 
    } else { 
     leaveRoom(); 
    } 

} 
+0

谢谢你,乐于助人。发生错误是因为我试图在主活动UI线程上打开一个新屏幕。我修好了它 – user2510952

相关问题