游戏技术在不断发展。 然而,数十年来,许多核心游戏玩法元素保持不变。 高分,排行榜,任务,成就和多人支持就是例子。 如果您正在为Android平台开发游戏,则无需手动实现任何这些元素。 您可以直接使用Google Play游戏服务 API。

在本教程中,我将向您展示如何创建一个简单的Android游戏,如何向其中添加Google Play游戏服务以及如何使用排行榜和成就API。

先决条件

为了能够遵循本教程,您需要具备以下条件:

  • 最新版本的Android Studio 。
  • 安装了最新版本的Google Play服务应用的Android设备。

1.创建一个简单的游戏

将Play游戏服务API添加到空白的Android Studio项目中没有任何乐趣。 因此,现在让我们创建一个游戏,用户只需单击一个按钮即可获得积分。 更准确地说,游戏的目标是在60秒内尽可能多地单击一个按钮。

第1步:创建游戏布局

游戏的布局将具有一个Button小部件,用户将单击该Button小部件以获取积分,以及两个TextView小部件以显示分数和剩余时间。 如果将它们全部放置在RelativeLayout并在水平和垂直方向上居中,则应具有如下所示的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.tutsplus.mylittlegame.MainActivity"><Buttonandroid:text="Start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_centerHorizontal="true"android:id="@+id/main_button" /><TextViewandroid:text="Time remaining: 0 seconds"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/main_button"android:layout_centerHorizontal="true"android:layout_marginTop="25dp"android:id="@+id/time_view" /><TextViewandroid:text="Score: 0"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@+id/main_button"android:layout_marginBottom="28dp"android:layout_centerHorizontal="true"android:id="@+id/score_view" /></RelativeLayout>

我们的游戏将有一个排行榜屏幕和一个成就屏幕。 要允许用户导航到这些屏幕,请在布局文件的末尾添加两个以上的Button小部件。

<Buttonandroid:text="Achievements"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"android:id="@+id/achievements_button"android:onClick="showAchievements"/><Buttonandroid:text="Leaderboard"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_alignParentRight="true"android:id="@+id/leaderboard_button"android:onClick="showLeaderboard"/>

请注意,两个按钮都具有onClick属性。 我们将在以后的步骤中创建它们引用的Java方法。

步骤2:实施游戏逻辑

在活动内部,为我们在布局XML文件中定义的游戏小部件创建成员变量。 此外,为得分创建一个int变量,为游戏状态创建一个boolean变量。

private Button mainButton;
private TextView scoreView;
private TextView timeView;private int score = 0;
private boolean playing = false;

使用findViewById()方法初始化活动的onCreate()方法内的小部件。

mainButton = (Button)findViewById(R.id.main_button);
scoreView = (TextView)findViewById(R.id.score_view);
timeView = (TextView)findViewById(R.id.time_view);

要侦听Button小部件上的单击,请创建一个OnClickListener并将其添加到其中。

mainButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// More code goes here}
});

现在,我们必须实现以下要求:

  • 用户第一次单击按钮时,游戏必须开始。
  • 随后的每次点击都应增加score变量。
  • 游戏必须在60秒后结束。

我们可以使用playing变量来区分首次点击和所有后续点击。 为了跟踪时间,我们可以使用抽象的CountDownTimer类,它非常适合我们的需求。 它内部有一个onTick()方法,可以准确地更新timeView以显示剩余的秒数。 它还具有onFinish()方法,当倒计时结束时将调用该方法。

因此,将以下代码添加到onClick()方法:

if(!playing) {// The first clickplaying = true;mainButton.setText("Keep Clicking");// Initialize CountDownTimer to 60 secondsnew CountDownTimer(60000, 1000) {@Overridepublic void onTick(long millisUntilFinished) {timeView.setText("Time remaining: " + millisUntilFinished/1000);}@Overridepublic void onFinish() {playing = false;timeView.setText("Game over");mainButton.setVisibility(View.GONE);}}.start();  // Start the timer
} else {// Subsequent clicksscore++;scoreView.setText("Score: " + score + " points");
}

此时,您可以运行项目以玩游戏。


2.添加游戏服务依赖项

配置项目以使用Play游戏服务API涉及许多步骤。 通过使用Android Studio的Firebase助手,可以使其中一些自动化。

转到“ 工具”>“ Firebase”,打开助手窗口。 接下来,在“ 分析”部分中,单击“ 记录分析事件”链接。 现在,您可以通过单击“ 连接 到Firebase”按钮 Android Studio项目连接到Firebase项目。 确保在弹出的对话框中选择“ 创建新的Firebase项目”选项。


建立连接后,请按向应用程序添加分析按钮以将所有必需的更改添加到build.gradle文件。

您必须手动添加Play游戏服务的依赖关系。 因此,转到app模块的build.gradle文件并添加以下compile依赖项:

compile 'com.google.android.gms:play-services-games:9.8.0'

此外,游戏服务API需要XML配置文件。 在res / values文件夹中创建一个名为games-ids.xml的文件。 我们将在以后的步骤中添加内容。

3.注册游戏

所有使用Google Play游戏服务的游戏都必须在Play开发者控制台上注册。 您必须支付25美元的一次性注册费才能访问控制台。

在控制台中,单击游戏板图标以打开“ 游戏服务”屏幕。


接下来,点击设置Google Play游戏服务按钮以开始注册游戏。

在弹出的对话框中,选择第二个标签,因为我们的游戏已经在使用Google API。 现在,您必须能够在可用项目列表中查看Firebase项目的名称。 选择它之后,为游戏选择一个类别。 目前,您可以使用“ 休闲”类别。


按“ 继续”后 ,您可以通过单击“ 链接Firebase”按钮来链接Firebase Analytics和Play游戏服务。

接下来,转到“ 链接的应用程序”部分,将您的Android Studio项目链接到Play开发者控制台。 在弹出的对话框中,按Android按钮,然后在“ 包名称”字段中输入项目的包名称。


按“ 保存并继续”按钮为您的游戏生成客户端ID。


我们的游戏现已成功在Google Play开发者控制台中注册。

4.添加测试用户

仅当您的游戏在Google Play上发布时,Play游戏服务API才有效。 但是,为了允许您测试游戏,开发人员控制台可让您关联一些测试用户帐户。 通过转到“ 测试”部分,您可以添加或删除测试用户帐户。 确保在此处添加您在手机或模拟器上使用的Google帐户。


5.创建排行榜

排行榜不过是显示用户高分的屏幕。 Play游戏服务排行榜可让用户查看其每日,每周和历史最高分。

在Play开发者控制台上创建排行榜只需点击几下。 转到排行榜部分,然后按添加排行榜按钮。 在下一个屏幕中,给排行榜起一个有意义的名称,然后按保存按钮。


现在我们的排行榜已经准备就绪。

6.创造成就

成就是用户在管理方面做出的特殊贡献而获得的游戏奖励。 具有很多成就可以解锁的游戏通常比没有游戏要有趣。 因此,当今Google Play上的大多数热门游戏都有数十种甚至数百种成就。

在本教程中,我们将仅向游戏添加一项成就。 其名称将为Lightning Fast ,当用户每分钟要尝试点击按钮100次以上时,它将被解锁。 要创建成就,请转到“ 成就”部分,然后按“ 添加成就”按钮。 输入成就的名称和描述后,按保存按钮。


7.更新游戏配置XML

排行榜和成就都有唯一的标识符。 现在,我们必须将这些标识符以及注册过程中生成的应用程序ID添加到我们的Android Studio项目中。 您可以通过手动更新我们之前创建的games-ids.xml文件来实现。 但是,我建议您使用开发者控制台中可用的自动生成的配置代码。

要获取自动生成的配置代码,您可以转到“ 成就”部分或“ 排行榜”部分,然后按“ 获取资源”链接。 您将看到如下所示的XML代码:

<?xml version="1.0" encoding="utf-8"?>
<!--
Google Play game services IDs.
Save this file as res/values/games-ids.xml in your project.
-->
<resources><string name="app_id">1234567890</string><string name="package_name">com.tutsplus.mylittlegame</string><string name="achievement_lightning_fast">HzkA4Kz04F8MRYIAze</string><string name="leaderboard_my_little_leaderboard">HzkA4Kz04F8MRYIBVU</string>
</resources>

复制所有代码并将其粘贴到项目的games-ids.xml文件中。

8.连接到Play游戏服务

在使用排行榜和成就API之前,我们必须创建一个GoogleApiClient实例并将其连接到Play游戏服务。 因此,将GoogleApiClient对象添加为您的活动的成员变量。

我们必须使用GoogleApiClient.Builder类来构建GoogleApiClient实例。 在构建客户端时,我们可以使用addApi()addScope()方法指定我们感兴趣的API和API范围。

此外,我建议您调用enableAutoManage()方法以确保客户端自动管理与游戏服务的连接。 但是,该方法需要一个OnConnectionFailedListener ,当连接失败时将调用该方法。 现在,我们将简单地调用finish()方法以在连接失败的情况下关闭应用程序。

因此,在onCreate()方法的开头添加以下代码:

apiClient = new GoogleApiClient.Builder(this).addApi(Games.API).addScope(Games.SCOPE_GAMES).enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {@Overridepublic void onConnectionFailed(@NonNull ConnectionResult connectionResult) {Log.e(TAG, "Could not connect to Play games services");finish();}
}).build();

如果立即运行该应用程序,系统将提示您为自己创建一个玩家ID。 输入您选择的玩家ID,然后按“ 登录”按钮。


9.使用排行榜

将分数提交到排行榜仅需一行代码。 您需要做的就是调用Games.Leaderboards类的submitScore()方法。 作为参数,它需要GoogleApiClient实例,排行榜的ID和得分。

在我们的游戏中,我们必须在60秒结束时提交分数。 因此,将以下代码添加到onFinish()方法中:

Games.Leaderboards.submitScore(apiClient,getString(R.string.leaderboard_my_little_leaderboard),score);

要查看排行榜,我们必须以排行榜意图开始新的活动。 要获取页首横幅意图,请调用Games.Leaderboards类的getLeaderboardIntent()方法,并将GoogleApiClient实例和页首横幅ID传递给它。

我们游戏的布局已经有一个按钮,可以按下该按钮来打开排行榜。 其onClick属性的值为showLeaderboard 。 因此,将以下代码添加到您的活动中:

public void showLeaderboard(View v) {startActivityForResult(Games.Leaderboards.getLeaderboardIntent(apiClient,getString(R.string.leaderboard_my_little_leaderboard)), 0);
}

您可以立即运行该应用程序,然后再次玩游戏。 这次,游戏结束时,您的分数将被提交到排行榜。 这是默认排行榜的样子:


10.使用成就

通过调用Games.Achievements类的unlock()方法,您可以解锁任何成就。 该方法期望GoogleApiClient实例和成就的ID作为其唯一参数。

当用户的分数超过100分时,我们必须解锁在控制台中定义的“闪电般的成就”。 因此,在增加分数的代码之后,添加以下代码:

if(score>100) {Games.Achievements.unlock(apiClient, getString(R.string.achievement_lightning_fast));
}

显示成绩屏幕所需的代码与我们编写的用于显示排行榜屏幕的代码非常相似。 您需要做的就是将getAchievementsIntent()方法的返回值传递给startActivityForResult()方法。

public void showAchievements(View v) {startActivityForResult(Games.Achievements.getAchievementsIntent(apiClient),1);
}

如果您运行应用并再次玩游戏,当您的分数首次超过100分时,您会看到一个成就弹出窗口。


结论

现在,您知道如何在Android Studio项目中使用Google Play游戏服务API。 Play游戏服务不仅限于Android平台。 它们也可以在Web和iOS平台上轻松使用。 因此,Play游戏服务可让您创建跨平台游戏,并为多个平台上的用户提供一致的游戏体验。

翻译自: https://code.tutsplus.com/tutorials/get-started-with-google-play-games-services--cms-27755

Google Play游戏服务入门相关推荐

  1. 在 Android 中使用 Google Play 游戏服务登录出现12501 报错

    在 Android 中使用 Google Play 游戏服务进行登录出现12501报错 添加Google Play服务 配置Google API控制台项目 配置AndroidManifest.xml ...

  2. 实例:Google Play游戏服务接入排行榜和成就系统

    一,前期基础知识储备 1)排行榜官方文档:https://developers.google.com/games/services/common/concepts/leaderboards Leade ...

  3. 黑客攻防:从入门到入狱_每日新闻摘要:游戏服务黑客被判入狱27个月

    黑客攻防:从入门到入狱 On Christmas day, 2013, many delighted people opened up new Xbox and Playstation gifts. ...

  4. Android 入门之 安装镜像 (鉴于国内Google相关很多服务都无法访问)

    很多新手创建sdk是出现了no system images installed for this target 这个问题, 方法一 http://blog.csdn.net/shengxia0dubi ...

  5. 《Android游戏编程入门经典》——1.1节Android 4简介

    本节书摘来自异步社区<Android游戏编程入门经典>一书中的第1章,第1.1节Android 4简介,作者[美]Jonathan S. Harbour,更多章节内容可以访问云栖社区&qu ...

  6. 云容器实例服务入门必读

    云容器实例服务入门必读 华为云容器实例(Cloud Container Instance)服务是基于Kubernetes的Serverless Container(无服务器容器)引擎,兼容Kubern ...

  7. Google 2020游戏开发者峰会回顾、比尔•盖茨的夏日书单、Libaom 2.0.0发布等|Decode the Week...

    Decode the Week≠音视频技术周刊  01 别人家的毕业典礼:加州大学把毕业典礼搬到了<我的世界> 日前,加州大学伯克利分校在Minecraft举行了春季毕业典礼,上千名学生参 ...

  8. 百万在线:大型游戏服务端开发

    进入手游时代,服务端技术也在向前演进.现代游戏服务端既要承载数以万计的在线玩家,又要适应快速变化的市场需求,因此,如何设计合适的架构就成了重中之重.服务端技术并不简单,作为服务端新人,全面掌握服务端技 ...

  9. mmhmm重塑视频会议、2020新款emoji可爱来袭、微软将推云游戏服务xCloud等| Decode the Week...

    Social Media Sucks. Decode the Week≠音视频技术周刊  News Briefing 1. Evernote前CEO推出虚拟摄影棚应用mmhmm 重塑视频会议 Phil ...

最新文章

  1. spark入门_Spark技术入门——配置部署、SparkSQL应用
  2. Qt中QtTableWidget的使用
  3. 实际返回的行数超出请求的行数怎么解决_count(*)这么慢,我该怎么办?
  4. 一个简单的动态web服务器
  5. fanuc机器人刷机教程_发那科机器人的正确操作方法及步骤
  6. java正则表达式所有字符串_“JAVA”正则表达式如何匹配所有符合要求的子字符串?...
  7. 传高盛与德劭前合伙人组5亿美元私募基金
  8. Win7/Win8/Win8.1下配置apache+php运行缓慢问题解决方法
  9. Kali2020.1安装AWVS12 详细过程
  10. java debug命令详解_DEBUG命令使用解析及范例大全
  11. Qt界面语言设置(官方汉化)
  12. 单臂路由之一,单网口软路由实现主路由功能,光猫或交换机剩余网口实现上网功能
  13. 【C语言】实现简单的五子棋
  14. Codeforces311D. Interval Cubing 神线段树
  15. php开发前端的框架有哪些,网站的一些前端框架有哪些?4个前端框架对比
  16. Keen Team: 这群执著的人和那些纯粹的事
  17. java制作摄影建模,照片建模的拍摄要求
  18. win10 c语言 语音功能,win10系统自带录音功能在哪?windows10开启录音功能的方法-系统城...
  19. opengles图像处理之图片锐化处理
  20. python 本地离线安装whl文件

热门文章

  1. github Action使用
  2. 【考研】操作系统:2019年真题43(同步互斥问题)
  3. 基于MPC的自适应巡航控制
  4. P2562 [AHOI2002]Kitty猫基因编码
  5. TryHackMe学习笔记-Windows PrivEsc Arena
  6. c1科目三灯光全语言播报,新规科三全程语音提示(灯光模拟+项目操作),人手一份,考试必备!...
  7. 刁肥宅手笔:纯C语言利用链栈实现从后缀表达式Array中顺序输入表达式并求值
  8. ei指什么_SCI、EI分别是什么意思
  9. CHIPON 芯旺微的KF32A156系列的CAN FD模块的使用介绍
  10. OLED TFT屏幕相关