我正在实施Turn Base Multiplayer game using Google Play Services。但它似乎缺少一个主要特征:追踪胜利和失败!对于任何类型的竞争游戏来说,这似乎都是一个非常重要的功能。
我错过了什么吗?这是否已经由Google以某种方式处理?
如果没有,我想知道是否有人实施了他们自己的w / l跟踪系统,以及他们是如何接近它的。我担心只是在本地保存它,因为它可能与现实不同步。我想我可以使用谷歌云存储,但我也担心跟踪哪些匹配已被考虑可能有点容易出错(例如,多次计算同一场比赛的胜/负)。也许使用Google Play排行榜系统会很好,因为您可以与朋友/等进行比较。
答案 0 :(得分:2)
您可能想尝试使用Google Play游戏服务提供的Events。以下是使用它的步骤:
当游戏赢或输时,请调用以下代码,其中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进行设置。
要阅读您已保存的数据,您可以使用以下回调:
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();
}
});
这种方法在本地维护和管理计数方面的好处是:
当然,您可以使用相同的方法为您想要的任何内容创建事件。
答案 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();
}