基于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相机类详解及源码分析
如何在基于 BB10 Cocos2D 的应用程序中导入和使用 QObject