gpt4 book ai didi

java - libGDX iOS 游戏收不到输入

转载 作者:可可西里 更新时间:2023-11-01 04:43:50 26 4
gpt4 key购买 nike

我目前正在使用 roboVM 将我的 LibGDX 游戏移植到 iOS。一切正常,除了我在让我的绑定(bind)为 admob 和 Google Play 游戏服务工作时遇到了一些问题。我能够解决 Admob 的问题,但 GPGS 也出现了同样的问题,我找不到解决方法。 bindings是绑定(bind)到各种 iOS SDK 的钩子(Hook)。我用它们来展示 Admob 广告并与 Google Play 服务交互。

我试着按照这里的 Sample.java:

Sample.java

但它对我来说有一些问题。首先,示例覆盖的 didFinishLaunching() 方法是错误的,并且永远不会被调用。它应该改写 didFinishLaunching(UIApplication application, UIApplicationLaunchOptions launchOptions)。

我现在遇到的主要问题是由于 window.makeKeyAndVisible() 调用,游戏不接受用户输入。如果我采用这种方法,一切都很好,但我无法展示广告,也无法展示 Google Play 服务。我将看到有关窗口不在 View 层次结构中的警告。通过在显示广告之前调用 makeKeyAndVisible() 并在插页式广告的委托(delegate)中关闭后调用 setHidden() ,我能够解决 admob 插页式广告的问题。但是我无权对 Google Play 服务执行相同的操作。似乎没有其他人遇到此问题。可能是什么问题呢?我对 iOS 不是很熟悉,所以我不知道需要做什么才能使我的应用正确接收输入。

最佳答案

好的,所以使用 Admob 和 GPGS 或其他绑定(bind)将 LibGDX 游戏发布到 iOS 是一个痛苦的过程,但我已经设法让一切正常,我的游戏现在处于等待审查状态。在回答这个问题时,Apple 似乎拒绝使用 Google Play 游戏服务的应用程序,因为 GPGS SDK 会将用户带到 Safari 以登录。这对 Apple 来说是 Not Acceptable ,因为这是“糟糕的用户体验”。实际上,当用户尝试登录 GPGS SDK 时会寻找 Google+ 的安装以登录,如果找不到它,然后它会打开 Chrome 浏览器,如果是 Chrome,最后是 Safari没有安装。在正确集成 GPGS 并尝试将我的二进制文件提交给 Apple 之后,我遇到了另一个关于 Google SDK 未签名的问题。因为即使我解决了这个问题,我的应用程序看起来也会被拒绝,所以我决定放弃 GPGS 并改用 Apple 的 Game Center。也就是说,我仍然能够通过 Admob 在我的测试设备上运行 GPGS,所以我可以在这里回答如何操作。

首先,BlueRiverInteractive中的样本对于 LibGDX 游戏来说并不是那么有用。所有你不应该搞砸的 UIWindow、UIViewController 和 UIView 东西。您的 IOSLauncher 类应该扩展 Delegate 而不是 UIApplicationDelegateAdapter。如果您查看 Delegate 内部,它会负责为您的应用程序设置 UIApplication、UIWindow 和其他 iOS 事物。当你扩展它时,你将被迫实现 createApplication()。这是我的例子:

@Override
protected IOSApplication createApplication() {

final IOSApplicationConfiguration config = new IOSApplicationConfiguration();
config.orientationLandscape = false;
config.orientationPortrait = true;
config.useAccelerometer = false;
config.useCompass = false;

iosApplication = new IOSApplication(new SplishGame(this), config);
return iosApplication;
}

将 iosApplication 保留为 IOSLauncher 类的字段成员。通过它,您可以获得显示插页式广告和排行榜/成就所需的 UIWindow。

第二件事是确保您的 IOSLauncher 类正在覆盖 didFinishLaunching(UIApplication application, UIApplicationLaunchOptions launchOptions) 而不是只有一个参数的 didFinishLaunching 方法,否则它不会被调用。在您的 didFinishLaunching 方法中,您可以实例化您的 GPGS 管理器类(稍后会详细介绍)并尝试静默登录。这让我想起了我在尝试集成 GPGS 时遇到的另一个问题 - 确保您使用 GPGS 管理器对象让生活更轻松 (PlayServicesManager)。 GPGS 绑定(bind)项目中有两个示例,我最初是在查看不使用 PlayServicesManager 类的“难以使用”的示例。设置管理器对象后,您可以调用 manager.login() 或 manager.getLeaderboards() 等简单方法来执行您需要执行的操作。

要在 didFinishLaunching 方法中初始化您的管理器类,请执行以下操作:

    playManager = new PlayServicesManager();
playManager.setClientId(CLIENT_ID);
playManager.setUserDataToRetrieve(true, false);
playManager.setViewController(iosApplication.getUIViewController());
playManager.didFinishLaunching();

对于 Game Center,它是这样的:

gcManager = new GameCenterManager(iosApplication.getUIWindow(), new GameCenterListener() {...(overridden methods left blank)
gcManager.login();

然后您的核心项目的代码可以通过您的 ActionResolver 接口(interface)或您命名的任何 native 接口(interface)调用必要的函数。所以你会有这样的东西:

@Override
public void getLeaderboards() {
log.debug("Showing all leaderboards.");
playManager.showLeaderboardsPicker();
}

一切都应该有效。

显然您需要做的另一件事(仅适用于 GPGS)是将此方法复制到您的 IOSLauncher 类中:

// copy-paste this to your app delegate.
@Override
public boolean openURL(UIApplication application, NSURL url, String sourceApplication, NSPropertyList annotation) {
return GPPURLHandler.handleURL(url, sourceApplication, annotation);
}

据我所知,大概就是这些了。如果您认为有什么不对或我忘记了重要的事情,请发帖。

关于java - libGDX iOS 游戏收不到输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27349947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com