2

我正在嘗試在Android中使用玩遊戲服務開發一個簡單的基於回合的多人遊戲。我遵循文檔中的所有步驟:https://developers.google.com/games/services/android/turnbasedMultiplayer#implementing_auto-matching唯一的區別是我不希望我的玩家能夠邀請我希望它成爲純自動匹配的朋友。這場比賽只有2名球員,並且只能開始一次2名球員的比賽。我的問題是它似乎不是自動匹配的球員。我在2臺設備上運行應用程序,他們似乎從來沒有找到彼此......他們都連接到Play遊戲服務的罰款,但他們都只是創造一個新的遊戲。這是我連接GoogleApiClient後的代碼。Android Google Play遊戲服務基於回合的多人遊戲不自動匹配

@Override 
public void onConnected(Bundle bundle) { 
    pDialog.dismiss(); 
    Toast.makeText(this, "Connected", Toast.LENGTH_LONG).show(); 

    showDialog("Matching players"); 

    Bundle autoMatchCriteria = RoomConfig.createAutoMatchCriteria(1,1,0); 
    TurnBasedMatchConfig tbmc=TurnBasedMatchConfig.builder(). 
setAutoMatchCriteria(autoMatchCriteria).build(); 

    Games.TurnBasedMultiplayer.createMatch(mGoogleApiClient, 
tbmc).setResultCallback(new MatchInitiatedCallback(this)); 
} 

這裏是我的MatchInitiatedCallback

public class MatchInitiatedCallback implements  
ResultCallback<TurnBasedMultiplayer.InitiateMatchResult> { 

    private Context context; 

    public MatchInitiatedCallback(Context c) { 
     context = c; 
    } 

    @Override 
    public void onResult(TurnBasedMultiplayer.InitiateMatchResult 
initiateMatchResult) { 

     pDialog.dismiss(); 

     if(!initiateMatchResult.getStatus().isSuccess()) { 

      Toast.makeText(context, "ERROR: " + 
initiateMatchResult.getStatus().getStatusCode(), Toast.LENGTH_LONG).show(); 

      return; 
     } 

     TurnBasedMatch match = initiateMatchResult.getMatch(); 

     if(match.getData() != null) { 
      Toast.makeText(context, "Player2 " + match.getData().toString(), 
Toast.LENGTH_LONG).show(); 

     } else { 
      Toast.makeText(context, "Player1", Toast.LENGTH_LONG).show(); 
      initGame(match); 
     } 
    } 
} 

兩款器件均表明說TOAST: 「PLAYER1」 並調用initGame(比賽)方法,該方法是在這裏:

public void initGame(TurnBasedMatch match) { 
    String initialise = "initialised"; 
    Games.TurnBasedMultiplayer.takeTurn(mGoogleApiClient, 
match.getMatchId(),initialise.getBytes(Charset.forName("UTF-16")), 
match.getParticipantId(Games.Players.getCurrentPlayerId(mGoogleApiClient))). 
setResultCallback(this); 
} 

@Override 
public void onResult(TurnBasedMultiplayer.UpdateMatchResult 
updateMatchResult) { 

    if(updateMatchResult.getMatch().getStatus() == 
TurnBasedMatch.MATCH_STATUS_AUTO_MATCHING) { 
     Toast.makeText(this, "Still automatching",  
Toast.LENGTH_LONG).show(); 
    } else { 
     Toast.makeText(this, "Not automatching", Toast.LENGTH_LONG).show(); 
    } 

} 

而且一旦他們都顯示TOAST:「仍然自動匹配」 我做錯了什麼。爲什麼這些設備不能自動匹配。我是否跳過某個步驟?請幫忙。

回答

1

試圖改變自己的initGame方法,因此指定空下一個參與者(讓玩遊戲服務查找自動匹配玩家):

public void initGame(TurnBasedMatch match) { 
    String initialise = "initialised"; 
    Games.TurnBasedMultiplayer.takeTurn(
     mGoogleApiClient, 
     match.getMatchId(), 
     initialise.getBytes(Charset.forName("UTF-16")), 
     null 
     ).setResultCallback(this); 
} 

還要確保上使用兩種不同的谷歌+賬戶這兩個設備。

我試過你的代碼,兩個設備都說「Player1」和「Not automatching」(!)。在更改爲null後,第一個設備會顯示「Player1」和「Still automatching」,第二個設備顯示「Player2 [B @ 41b08830」

我認爲您的問題是由於邀請以及自動匹配方式由Play處理遊戲服務。當將參與者連接到TurnBasedMultiplayer比賽時,邀請將逐個發送給參與者。當您在initGame方法中調用takeTurn時,您必須指定下一個參與者來接收邀請。當參與者接受邀請時,他必須致電takeTurn並指定下一位參與者接受邀請等。如果您指定爲空,則意味着下一個邀請會轉到自動匹配的播放器。

相關問題