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并指定下一位参与者接受邀请等。如果您指定为空,则意味着下一个邀请会转到自动匹配的播放器。

相关问题