基于cocos2dx,在android的游戏中加入google play game排行榜。

国内关于google play game service的例子实在太少,而最近做的一款游戏要用到排行榜。

顺便打个广告,小弟做的一款答题休闲类Dogface GaGa游戏在苹果谷歌以及国内各大平台已经上线了。

总的来说google play service比game center,还是有很多有点的。首先一点就是,google paly service支持ios 以及 android跨平台玩家共用一份数据。其次,当玩家玩到某一进度时,在其他手机中,可以不用重新开始,实现游戏数据同步。而game center只能实现排行榜以及成就榜。还有一点,排行分数的更新速度,google play service是非常快的,这边上传完分数,那边就已经可以看到了。相反,game center上传与显示之间却存在时差,一般你上传的分数,要等2个小时多,其他玩家才能看到。所以估计未来会有更多的ios游戏加入google play。


注意:使用排行榜的前提是你已经是google开发者,并且在自己的应用中设置了google play游戏排行榜功能。这是小生第一次发的技术贴,转发请著名出处。


demo下载地址:点击打开链接
ccos2dx版本:2.2.3(其他版本应该也可以)


一、google play框架的配置


1、先下载好google play service sdk,在android manger里就可以下载。下载完是放在<android-sdk>/extras/google目录里。我们找到google-play-services_lib文件,在<android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/里,然后复制到你的指定的位置,然后在eclipse中导入这个项目。导入方法与导入安卓项目一样。


2、在eclipse中,在你的cocos2dx项目中引用这个库。右键项目名,properties>android>add>选择google-play-services_lib项目。


3、在eclipse中,打开你的项目的manifest.xml,添加
	<meta-data android:name="com.google.android.gms.version"
        	android:value="@integer/google_play_services_version" />

这样你就可以用google play的服务了,广告,game service等。


二、在项目中加入game service服务


1、下载完demo以后,复制 demo 中pro.android/src/com/google文件夹复制到自己项目的com里,或者直接把BaseGameActivity.java GameHelper.java GameHelperUtils.java复制到自己的包中,不过就要修改三个文件的包名。


2、复制完以后,因为GameHelperUtils.java中,import了.R文件,所以要修改为自己显目的.R文件


3、修改自己项目的activity继承自BaseGameActivity这个类。并添加成员变量

                private static final int REQUEST_ACHIEVEMENTS = 10000;
		private static final int REQUEST_LEADERBOARDS = 10001;
		private static final int REQUEST_LEADERBOARD = 10002;
		static Activity me = null;//在onCreate方法中指向this。</span>

三个成员变量。看3个名称就知道,是指定请求类别的。第一个是请求成就板,第二个是请求所有的排行榜,第三个是请求指定的排行榜。


4、添加显示排行榜方法

public static void showLeaderboard(final String leaderboardID) {
			//因为是静态方法,所以要引用自身的acivity,所以上一步才添加me这个成员变量
			//由于安卓的设定,要显示控件,要在ui线程里。
			me.runOnUiThread(new Runnable() {
				@Override
				public void run() {
					if (((Dogface_Ga_Ga) me).isSignedIn())
					//这里要转换为自身acivity的类名
						me.startActivityForResult(
							Games.Leaderboards.getLeaderboardIntent(
									((Dogface_Ga_Ga) me).getApiClient(), leaderboardID),
							REQUEST_LEADERBOARD);
					else {

						((Dogface_Ga_Ga) me).beginUserInitiatedSignIn();
						//当没有登录的时候,则启动登录界面
					}
				}
			});
		}</span>


5、添加上传分数方法

	public static void submitScore(final String leaderboardID, final long score) {
		//leaderboardID是google play开发者自己应用设置的排行榜id
		me.runOnUiThread(new Runnable() {

			@Override
			public void run() {
				if (((Dogface_Ga_Ga) me).isSignedIn()) {
					Log.d(TAG, "Submit score " + score + " to " + leaderboardID);

					Games.Leaderboards.submitScore(((Dogface_Ga_Ga) me).getCustomApiClient(),
							leaderboardID, score);

				} else {
					//这里可以把最高分存储起来,在游戏能登录后,在提交分数
				}
			}
		});
	}


6、在manifast.xml中加入

        <meta-data
            android:name="com.google.android.gms.games.APP_ID"
            android:value="@string/google_play_game_app_id" />


google_play_game_app_id是你的应用在开启google play服务时分配的id。你可以在项目的res/values中新建xml里定义id的值,如:

<resources>
<string name="google_play_game_app_id">此处写上google play的id</string>
</resources>



至此,就可以实现游戏的上传分数,以及显示排行榜了。之后如何让c++层调用java层,网上有很多教程,这里就不做多介绍了。

这是我第一次写技术文,如果有哪些漏洞或者错误,请各位大牛指正。小生有错必改。

注意在调试游戏的时候,不能用自带的debug签名,以为你在设置google play id的时候,是根据的你的签名秘钥绑定的。你需要用自己的签名调试。如何更改调试签名,在我的下一篇中会介绍。




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值