Android Google Play游戏服务基于回合制的多人游戏不会自动匹配

时间:2015-03-19 12:31:42

标签: android google-play-services multiplayer google-play-games

我正在尝试使用Play游戏服务在Android中开发一个简单的基于回合制的多人游戏。我按照文档中的所有步骤进行操作:https://developers.google.com/games/services/android/turnbasedMultiplayer#implementing_auto-matching唯一的区别是我不希望我的玩家能够邀请我希望它纯粹是自动匹配的朋友。该游戏只有2名玩家,它只能启动ONCE 2玩家已经匹配。我的问题是它似乎不是自动匹配的玩家。我在2台设备上运行应用程序,他们似乎从来没有找到彼此......他们都连接到Play游戏服务,但他们都只是创建了一个新游戏。连接GoogleApiClient后,这是我的代码。

@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 个答案:

答案 0 :(得分:1)

尝试更改您的initGame方法,以便为下一位参与者指定null(让Play游戏服务找到一个自动匹配的玩家):

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

另外请确保在两台设备上使用两个不同的Google +帐户。

我尝试了你的代码,两个设备都说&#34; Player1&#34;和&#34;不自动匹配&#34;(!)。更改为null后,第一个设备说&#34; Player1&#34;和#34;仍然自动匹配&#34;和第二个设备说&#34;播放器2 [B @ 41b08830&#34;

我认为您的问题是由Play游戏服务处理邀请和自动匹配的方式。在将参与者与TurnBasedMultiplayer比赛联系起来时,会逐个向参与者发送邀请。在initGame方法中调用takeTurn时,必须指定下一个参与者才能接收邀请。当该参与者已接受邀请时,他必须致电takeTurn并指定下一位参与者接收邀请,依此类推。如果您指定null,则表示下一个邀请将转到自动匹配的播放器。