libGDX与Kotlin
移动游戏开发(7)

原文地址:Using Java to create iOS apps | LibGDX Google Play Games integration | #7


iOS的应用都是用苹果IDE Xcode在Swift或Objective-C下编写的。由于libGDX是使用Java(或者Kotlin、Python、Clojure、Scala)编写的,所以并不像添加Android那样简单。如果实在是需要发布iOS端游戏,可以使用RoboVM(当自己开始使用libGDX的iOS模块的时候,RoboVM宣布关闭了,但是仍有一个MobiDevelop维护的RoboVM分支),或者使用Multi-OS Engine(目前最好的替代方案)。

Multi-OS引擎是什么?如何使用?

Multi-OS Engine(以下简称MOE)为Java开发者提供了在Windows和macOS上同时编写Android和iOS的技术。相比于针对每个平台编写不同的代码,通过这项技术可以服用一些平台无关的Java代码,但仍需添加不同平台的UI。Multi-OS Engine提供了Android Studio和Eclipse下的插件,并且100%开源,也可以通过Maven调用。MOE目前由其组织者Migeran管理。

可以阅读这篇文章来开始MOE开发。简单说就是安装MOE插件(如果使用的是Android Studio的话),然后开始代码编写。以下是一些范例工程:

如果是从头创建libGDX工程的话,推荐使用Setup程序。这能帮助创建个性化的工程并自动下载需要的依赖包。

在Java中使用iOS框架和库

MOE有内建的“Java的原生绑定Nat/J库(Nat/J library for Java to native binding)”功能,可以利用转换器Wrapnatjgen绑定相关的原生头文件(Objective-C)来生成Java绑定。可以通过命令行或者右键菜单(更为简单一些)来连接第三方框架或库(Link third party frameworks or libraries)。

连接iOS第三方框架或库

连接iOS第三方框架或库

添加完连接之后,确认在ios/lib路径下有转换jar文件,在Xcode工程中也有框架或库的连接,否则会报出连接错误。如果需要的话,手动添加(在Xcode中打开Build Phases -> Link Binary with Libraries)。

添加iOS版Google Play Services框架

可以按官方指导中的Get Started with Play Games for iOS(Option2: Manual installation)章节来设置。需要下载以下框架:

  • Google Sign-In(Google登录):重要提示:当通过TestFlight测试程序的时候会无法启动程序。这是因为使用了废弃不用的GoogleSignIn.bundle。所以需要在Xcode工程中移除。
  • Google+ SDK
  • Play Games C++ SDK

同样要确认在Xcode工程中有以下框架(在Xcode中打开Build Phases -> Link Binary with Libraries):

  • AddressBook.framework
  • AssetsLibrary.framework
  • CoreData.framework
  • CoreLocation.framework
  • CoreMotion.framework
  • CoreTelephony.framework
  • CoreText.framework
  • Foundation.framework
  • MediaPlayer.framework
  • QuartzCore.framework
  • SafariServices
  • Security.framework
  • StoreKit
  • Security.framework
  • SystemConfiguration.framework
  • libc++.dylib
  • libz.dylib

最后,在Build Settings -> Linking -> Other Linker Flags中添加-ObjC连接标志(-ObjC linker flag)。

具体实现

首先需要实现这些接口:GPPSignInDelegateGPGStatusDelegateGIDSignInUIDelegateGIDSignInDelegate。然后定义范围(只需要在游戏身份认证的时候调用一次),并设置toast和成就消息放置位置。

https://gist.github.com/Majirefy/db29583b2d623fecf484e23aebf49330

接下来要通知Google Play Games API找到代理的实现方法(在本工程中,在IOSMoeLauncher类里面实现):

https://gist.github.com/Majirefy/3e83d24b363a3db941695f46f0c44428

在设置和初始化的最后阶段,需要设置client ID并调用silent登录方法。可以在Developer Console中获取Client ID。

https://gist.github.com/Majirefy/286a7a9933fb93bbac567e17edc3d2cf

为了让程序打开连接并且支持旧的代码,需要添加以下内容:

https://gist.github.com/Majirefy/05fa7ab2c2e06adccb33a67f204803c5

向排行榜提交用户分数

也许向排行榜提交用户分数是最为重要的功能。以下代码提供了相关处理,并检测提交是否成功:

https://gist.github.com/Majirefy/218e0c40ca446509450851a9a124a7af

显示排行榜

https://gist.github.com/Majirefy/27458d150ed5fa91fd1bed69d78fdfb9

从排行榜中加载玩家最高分数

https://gist.github.com/Majirefy/7d157947b8a421062ca7ea6195395250

Majirefy

Majirefy

喜欢折腾,喜欢各种各样的生活。曾经年少不懂事,看着别人写代码的样子感觉好帅,于是走上了半个不归路……然而,比起代码更喜欢写一些纯粹的文章,却经常因为自我不满意删掉重来。喜欢分享,无论是生活美好的瞬间,还是技术上的发现,虽然经常苦恼技术能力不强。由于喜欢买qiong买qiong买qiong,所以时常写一些类似使用体验的文章。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注