libGDX与Kotlin 移动游戏开发(6)
原文地址:How to integrate Google Play Games Services and Admob in libGDX using Kotlin | Android | #6
Google Play Games Services是最为难以集成到libGDX的Android和iOS(Multi-OS Engine,RoboVM已经关闭)的API之一。libGDX有一篇官方教程。可以参考GitHub上的BaseGameUtils范例工程。不过再继承另一个工程似乎是不明智的做法(需要做太多额外的无用功),所以使用平台代码接口完成。主要思路是编写一个带有基本方法的接口放在core模块中。之后在不同的目标平台模块中实现这个接口。
https://gist.github.com/Majirefy/6466fc660f3d2efce9c5e5ff1ca43f80
通过GitHub上的Splinter Sweets范例代码可以看出,范例使用了GameManager这个单例来管理游戏计时器、添加或移除内容。在这个类中,设置GameEventListener:
https://gist.github.com/Majirefy/e6e74801ab85d8d06980f887b324e312
这个监听器显式地声明为一个可以为空(null)的对象,这意味着如果不设置监听器,游戏不会抛出空指针异常(NullPointerException),这对桌面和web或者内测版本来说很有用。
如果想要现实Admob的广告(使其展示给用户),只需要调用以下代码的任意一个:
https://gist.github.com/Majirefy/5bfa829119d077bcd8df104c09c82714
Android端实现
Android端相比于iOS端来说更简单。基本上遵照官方教程即可。首先,需要在android/build.gradle文件中加入依赖:
dependencies { classpath 'com.google.gms:google-services:3.0.0' compile 'com.google.android.gms:play-services-games:9.6.1' }
接下来要实现GameEventListener接口(命名为AndroidGameEventListener):
https://gist.github.com/Majirefy/85ec0a2a640f2decff51d90df807a5d5
在构造函数中初始化广告相关内容。当用户关闭广告之后,需要再去申请一个新的广告,所以调用了requestNewInterstitial()方法。当过去50秒的游戏时间之后,游戏页面被展示出来。在这个过程中,条状广告banner应该被隐藏,因为用户可能会截图,因此需要使用Android Handler。
https://gist.github.com/Majirefy/c77a2031d443e38f5be1a8837907e9ed
初始化Google API Client
首先,需要初始化GoogleApiClient。这要使用Android的context和一个负责处理连接失败或者其它问题反馈的监听器:
https://gist.github.com/Majirefy/d4e179340f6a9ec5f3baa4653fd98059
PlayServiceListener实现:
https://gist.github.com/Majirefy/07c61350e4093dab401e007b9f786576
提交游戏分数
https://gist.github.com/Majirefy/666fbe51fa0b6fb9c6d5c495c7b4329e
显示玩家排行榜
https://gist.github.com/Majirefy/0fed1d0cb6e0b559d67ae4bd5cd20da5
注意:为了不使本文过于冗长,省略了一些方法的实现,譬如检查用户是否已经登录、是否连接到了Google Play Service。