gpt4 book ai didi

java - RoboVM 绑定(bind)编译问题

转载 作者:可可西里 更新时间:2023-11-01 05:35:40 31 4
gpt4 key购买 nike

使用 RoboVM 绑定(bind):https://github.com/BlueRiverInteractive/robovm-ios-bindings更具体地说是 Google Play 游戏服务绑定(bind)。

我似乎无法编译绑定(bind)。收到此错误:

An internal error occurred during: "Launching my-gdx-game-robovm".
No @Marshaler found for parameter 3 of @Bridge method
<org.robovm.bindings.gpgs.GPGLeaderboard: void
objc_loadScoresWithCompletionHandler(org.robovm.bindings.gpgs.GPGLeaderboard,org.robovm.objc.S elector,org.robovm.bindings.gpgs.GPGLeaderboardLoadScoresBlock)>

现在您可以说绑定(bind)本身存在错误,但我认为情况并非如此,因为会发生以下情况:

  1. 如果您直接运行 GPGC 项目(通过运行示例应用程序),它会正确编译并在模拟器上运行。
  2. 如果您尝试编译引用了 GPGC 项目的整个 libGDX 游戏,则会抛出此错误。
  3. 如果您更改 GPGLeaderboard 文件(包含错误的文件)并尝试直接运行 GPGC 项目,它也会抛出此错误。如果您第二次运行它,它会神奇地消失。

为什么会这样?如何修复?

使用最新的 GPGC 绑定(bind)和最新的 RoboVM nightlies (2014.01.05)。

谢谢。

编辑:绑定(bind)的作者修复了这个问题(截至 2014.01.07)。

最佳答案

block 的编码最近在 RoboVM 中发生了变化。这些绑定(bind)的作者必须相应地更新它们。下面是一个示例(来自 UIApplication),展示了如何在实例方法中编码 VoidBlock:

private static final Selector beginBackgroundTaskWithExpirationHandler$ = Selector.register("beginBackgroundTaskWithExpirationHandler:");
@Bridge private native static int objc_beginBackgroundTask(UIApplication __self__, Selector __cmd__, ObjCBlock handler);
@Bridge private native static int objc_beginBackgroundTaskSuper(ObjCSuper __super__, Selector __cmd__, ObjCBlock handler);
public int beginBackgroundTask(VoidBlock handler) {
return beginBackgroundTask(VoidBlock.Marshaler.toObjCBlock(handler));
}
protected int beginBackgroundTask(ObjCBlock handler) {
if (customClass) { return objc_beginBackgroundTaskSuper(getSuper(), beginBackgroundTaskWithExpirationHandler$, handler); } else { return objc_beginBackgroundTask(this, beginBackgroundTaskWithExpirationHandler$, handler); }
}

下面是静态方法的示例(在 UIView 中):

private static final Selector animateWithDuration$animations$ = Selector.register("animateWithDuration:animations:");
@Bridge private native static void objc_animate(ObjCClass __self__, Selector __cmd__, double duration, ObjCBlock animations);
public static void animate(double duration, VoidBlock animations) {
objc_animate(objCClass, animateWithDuration$animations$, duration, VoidBlock.Marshaler.toObjCBlock(animations));
}

关于java - RoboVM 绑定(bind)编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20933411/

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