Google Play游戏服务:创建事件和任务

高重玩价值是一款出色游戏的基本特征之一。 只要情节非常简单,即使情节非常简单的游戏也可以在Google Play上获得成功。 如果您是狂热的游戏玩家,您可能已经知道什么是重播价值。 如果您不这样做,则可以将其视为即使达到其主要目标,用户仍将再次玩游戏的可能性。

通过使用事件和任务API(它们是Google Play游戏服务 API的子集),您可以极大地提高游戏的重播价值,更不用说使它们更具挑战性和趣味性了。 在本教程中,我将向您展示如何充分利用这两个API。

1.了解事件和任务

游戏中发生的任何事情都可以视为事件。 通过使用事件API记录足够的事件,您可以密切分析用户的行为。 您可以推断出详细信息,例如用户可以在游戏中走多远,杀死多少敌人以及他们收集了多少游戏资源。 有了这些细节,您就可以轻松地改进游戏,使其更有趣。

但是,事件API很少单独使用。 大多数开发人员将其与quests API一起使用来创建任务。 顾名思义,追求是用户获得某些奖励所能达到的次要目标。 例如,如果您要创建一个用户尝试保存公主的游戏,则可以向其中添加一个任务,要求用户必须找到至少100个戒指。

如果您还没有猜到,可以使用事件来定义任务的完成标准。 在上面的示例中,找到戒指将是必须将任务标记为完成的100次事件。

尽管任务与成就有一些相似之处,但两者之间还是有一些重要区别:

  • 您无需编写任何代码即可向游戏中添加新任务,只要它所依赖的事件已成为游戏的一部分即可。
  • 任务是有时间限制的。 例如,您可以安排一个新任务在圣诞节前一周开始,并要求用户在圣诞节前夕完成任务。
  • 用户只有选择参与后才能完成任务。

有了许多有趣的任务,其中一些任务计划每周或每月重复一次,您可以毫不费力地让用户多次玩游戏。

2.创建事件

登录到Play开发者控制台,然后通过单击游戏板图标打开“ 游戏服务”屏幕。

接下来,选择要向其中添加事件的游戏,然后打开“ 事件”部分。

添加事件按钮开始创建事件。 在弹出的表单中,为事件指定一个有意义的名称。 继续上一步的示例,我将事件称为Collect Ring

创建事件对话框

按下“ 保存”按钮后,您将能够看到事件的ID。 为了能够在您的Android Studio项目中使用该事件,您必须将ID作为新的<string>标签添加到games-ids.xml文件中。

<string name="event_collect_ring">ABCDEFabcdef123</string>

3.创建任务

创建任务稍微复杂一些。 首先转到“ 任务”部分,然后按“ 添加任务”按钮。 为任务指定一个吸引人的名称和易于理解的描述。 两者都很重要,因为它们会被用户读取。 一个看起来不太有趣的任务不太可能会看到很多参与者。

任务名称和说明

接下来,向下滚动到“ 完成条件”部分。 在“ 查找事件”字段中,键入您先前创建的事件的ID。 在下一个输入字段中,您必须指定事件必须发生多少次才能完成任务。

计划部分中,指定任务的开始日期和时间 。 为了能够立即开始执行任务,您可以选择今天的日期。

您还必须通过在“天数”字段中输入一个值来指定任务的持续时间。 (可选)您可以选择在几乎没有时间时通知任务参与者。

任务必须有奖励-用户为什么还要选择参与? 您可以通过上传奖励文件(可以是任何格式的文件)来指定奖励是什么。 大多数开发人员选择使用JSON格式。 这是示例奖励文件:

{
    points: 3000,
    max_lives: 15
}

值得注意的是,奖励文件的内容对于Play游戏服务API并不重要。 解析并在游戏中使用它们是您的责任。

在“ 奖励数据”部分中,按“ 浏览”按钮并上传您创建的奖励文件。

完成标准时间表和奖励数据部分

最后,按保存以生成任务的ID。 (可选)您可以复制ID并将其作为另一个<string>标记添加到Android Studio项目的games-ids.xml文件中。

<string name="quest_please_the_princess">BCDEABCD123</string>

4.显示任务界面

Quests API提供了一个活动,可以显示游戏中所有可用的任务。 该活动还允许用户加入任务。

要打开任务活动,必须使用Games.Quests类的getQuestsIntent()方法getQuestsIntent()创建一个意图。 作为参数,它需要一个GoogleApiClient对象和一个int数组,该数组指定要显示的任务的类型。 以下是一些常见的任务类型值:

  • Quests.SELECT_OPEN ,用户可以立即参与的任务。
  • Quests.SELECT_UPCOMING ,一个尚未开始的任务。
  • Quests.SELECT_COMPLETED ,用户已经完成的一项任务。
  • Quests.SELECT_ACCEPTED ,用户当前正在参与的任务。

创建Intent对象后,可以将其传递给startActivityForResult()方法以显示quests活动。

以下代码显示了如何打开任务活动并显示四种类型的任务:

Intent intent = Games.Quests.getQuestsIntent(apiClient,
                new int[]{
                    Quests.SELECT_OPEN,
                    Quests.SELECT_UPCOMING,
                    Quests.SELECT_ACCEPTED,
                    Quests.SELECT_COMPLETED
                });
startActivityForResult(intent, 0);

任务活动如下所示:

可用任务

用户通过按“ 接受”按钮成为任务的参与者。 在执行任务期间,用户可以返回到任务UI,以查看完成了多少任务。

5.使用事件API

事件API可让您轻松管理游戏中的事件。 若要更改事件的值,可以使用Games.Events类的increment()方法。 作为其参数,它需要一个GoogleApiClient对象,事件的名称以及一个数字,该数字指定应将事件的值增加多少。

以下代码将event_collect_ring事件的值增加1

Games.Events.increment(apiClient, 
                       getString(R.string.event_collect_ring), 1);

要获取事件的当前值,必须使用load()方法。 由于该值是从Google的服务器异步获取的,因此该方法的返回值是PendingResult对象。 通过ResultCallback添加ResultCallback对象,可以在结果可用时通知您。

ResultCallback接口的onResult()方法内部,必须调用Events.LoadEventsResult对象的getEvents()方法,该对象返回一个EventBuffer 。 在缓冲区中找到所需的Event后,可以调用其getValue()方法以获取其当前值。

以下代码显示了如何获取event_collect_ring事件的值:

PendingResult<Events.LoadEventsResult> results =
                    Games.Events.load(apiClient, true);

results.setResultCallback(
    new ResultCallback<Events.LoadEventsResult>() {
        @Override
        public void onResult(@NonNull Events.LoadEventsResult 
                                            loadEventsResult) {
    
            // Fetch all events of the game
            EventBuffer events = loadEventsResult.getEvents();
    
            // Loop through all the events
            for(int i = 0; i < events.getCount(); i++) {
    
                Event currentEvent = events.get(i);
    
                // Check if current event is the desired event
                // and print its value
                if(currentEvent.getEventId().equals(getString(
                                   R.string.event_collect_ring)))
                    Log.d(TAG, "You have now collected " +
                          currentEvent.getValue() + " rings");
            }
        }
    }
);

6.检测任务完成

当用户按时完成任务时,您的游戏必须能够使用您在Play开发者控制台中上传的奖励文件来奖励用户。 要检测任务完成,必须创建QuestUpdateListener对象,并使用Games.Quests类的registerQuestUpdateListener()方法向Games.Quests API registerQuestUpdateListener()Games.Quests

QuestUpdateListener接口的onQuestCompleted()方法内部,您必须调用QuestUpdateListener claim()方法以索取任务的奖励。 您必须将GoogleApiClient对象,任务ID和当前里程碑的ID传递给方法。

索偿之后,您可以通过调用getCompletionRewardData()方法以byte数组的形式获取奖励文件。 因为我们的奖励数据只是一个JSON文件,所以您可以将byte数组传递给String类的构造函数,以将其转换为字符串。

Games.Quests.registerQuestUpdateListener(apiClient, 
    new QuestUpdateListener() {
        @Override
        public void onQuestCompleted(Quest quest) {
            Games.Quests.claim(apiClient, quest.getQuestId(), 
                                          quest.getCurrentMilestone()
                                               .getMilestoneId());
            byte[] rewardData = quest.getCurrentMilestone()
                                     .getCompletionRewardData();
            String reward = new String(rewardData);
        }
    }
);

此时,您可以将字符串转换为JSONObject实例,并读取其中的键值。 以下代码显示了如何获取两个称为pointmax_lives的键的值:

try {
    JSONObject rewardObject = new JSONObject(reward);
    int points = rewardObject.getInt("points");
    int maxLives = rewardObject.getInt("max_lives");
    Log.d(TAG, "You have now gained "
            + points + " points and "
            + maxLives + " lives");
} catch(Exception e) {
    Log.e(TAG, "Couldn't parse JSON");
}

请注意,任务完成后,任务活动会自动更新。 这是完成的任务的样子:

完成的任务

结论

在本教程中,您学习了如何使用任务和事件API来说服用户一次又一次地玩游戏。 但是请注意,由于这些API具有速率限制,因此您必须尝试避免在应用程序中过于频繁地使用它们。 您可以参考Play游戏服务质量检查清单页面,以了解更多限制和最佳做法。

翻译自: https://code.tutsplus.com/tutorials/google-play-games-services-creating-events-and-quests--cms-27853

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值