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

Posted 努力脱发成为大牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于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的时候,是根据的你的签名秘钥绑定的。你需要用自己的签名调试。如何更改调试签名,在我的下一篇中会介绍。




以上是关于基于cocos2dx,在android的游戏中加入google play game排行榜。的主要内容,如果未能解决你的问题,请参考以下文章

Cocos2dx-3.x 中CCCamera相机类详解及源码分析

Cocos2dx开发游戏移植到Android平台

如何在基于 BB10 Cocos2D 的应用程序中导入和使用 QObject

cocos2dx做的游戏帧数很低,请问为啥

怎么把cocos2dx游戏代码proj.android导入到androidstudio里

游戏中加入聊天可提高参与度和收入