追踪Google Play游戏服务中的胜利和失败

时间:2014-05-25 20:02:32

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

我正在实施Turn Base Multiplayer game using Google Play Services。但它似乎缺少一个主要特征:追踪胜利和失败!对于任何类型的竞争游戏来说,这似乎都是一个非常重要的功能。

我错过了什么吗?这是否已经由Google以某种方式处理?

如果没有,我想知道是否有人实施了他们自己的w / l跟踪系统,以及他们是如何接近它的。我担心只是在本地保存它,因为它可能与现实不同步。我想我可以使用谷歌云存储,但我也担心跟踪哪些匹配已被考虑可能有点容易出错(例如,多次计算同一场比赛的胜/负)。也许使用Google Play排行榜系统会很好,因为您可以与朋友/等进行比较。

2 个答案:

答案 0 :(得分:2)

您可能想尝试使用Google Play游戏服务提供的Events。以下是使用它的步骤:

  1. 转到Android Developer Console
  2. 在侧边栏上单击“游戏服务”,选择您的应用程序,然后选择“事件”
  3. 然后创建两个新活动,一个名为“赢得游戏”的活动。和其他“游戏丢失”,然后点击发布您的更改
  4. 单击“获取资源”链接以查看新事件的资源ID,并将其添加到res / values目录中的应用程序
  5. 当游戏赢或输时,请调用以下代码,其中eventRef是您在上一步中添加的友好资源名称," events_games_won"或" events_games_lost":

    int eventInt = activity.getApplicationContext().getResources().getIdentifier(eventRef, "string", "com.yourpackage.android"); 
    String eventID = activity.getString(eventInt);
    Games.Events.increment(apiClient, eventID, 1);
    

    如果您正在使用basegameutils,则可以使用aHelper.getApiClient()获取apiClient实例,否则请按these instructions进行设置。

  6. 要阅读您已保存的数据,您可以使用以下回调:

    PendingResult<Events.LoadEventsResult> results = Games.Events.load(apiClient, true);
    results.setResultCallback(new ResultCallback<Events.LoadEventsResult>() {
            @Override
            public void onResult(Events.LoadEventsResult result) 
            {
                Events.LoadEventsResult r = (Events.LoadEventsResult)result;
                EventBuffer eb = r.getEvents();
                for (int i=0; i < eb.getCount(); i++) {
                    Event event = eb.get(i);
                    // do something, like cache the results for later
                    YourGameState.eventStats.put(event.getName(), (int)event.getValue());
                }
                eb.close();
                listener.onResult();
            }
        });
    
  7. 这种方法在本地维护和管理计数方面的好处是:

    • 输入和输出存储在Google Play的云中,并且它们将存储在所有用户的设备中
    • 您可以使用“事件”创建任务(也在Google Play上进行了描述),例如&#34;本周赢得10场比赛&#34;或者&#34;本周不败&#34;
    • Google Play会为每个玩游戏的人提供有关活动的统计信息,这对于分析玩家活动和效果非常有用

    当然,您可以使用相同的方法为您想要的任何内容创建事件。

答案 1 :(得分:0)

这取决于您的实施。我创建了一个国际象棋应用程序,我只使用SharedPreferences来记录我的输赢。如果你正确使用它,它将不会出错。

例如

SharedPreferences prefs = this.getSharedPreferences(
      "com.example.app", Context.MODE_PRIVATE);
if (gameOver(Side.White)) {
    prefs.edit().putLong(dateTimeKey, prefs.getLong(losses, 0) + 1).commit();
} else if (gameOver(Side.Black)){
    prefs.edit().putLong(dateTimeKey, prefs.getLong(wins, 0) + 1).commit();
}