编辑:所以问题出现在Java端。购买完成的监听器没有被调用。这是非常有用的:IabHelper PurchaseFinishedListener在Cocos2dx的主/ UI线程上运行代码
我的Cocos2dx游戏在Android和iOS上大部分运行良好。只想给我带来麻烦的是Android应用内结算。
我使用JNI从C++调用Java。 Java代码会在Google Play计费系统中来回运行,并最终回拨至C++代码,指出要向用户提供多少宝藏(成功购买的数量)。
从Java回到C++的调用做了一件很奇怪的事情。运行的C++代码应该更新两件事的显示。但它只更新一个,并不一致。此外,多个从Java到C++的调用会导致CCNodes忽略触摸并执行其他奇怪的事情。
在阅读了类似的问题之后,我意识到也许Java到C++的调用不在主/ UI线程中。所以我试图解决这样的问题:
// Java code
IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase, IabResult result) {
if (result.isSuccess()) {
String sku = purchase.getSku();
if (sku.equals(IAB_ID_ABC)) {
me.runOnUiThread(new Runnable() {
public void run() {
callCppMethodFromJava_giveUserABC();
}
});
}
}
};
在这里我试图在main/UI线程上调用giveUserABC。 giveUserABC被称为但是它表现出如上所述的奇怪行为。
我试过的另一件事是通过CCNotificationCenter在givenUserABC中发布通知。这是在黑暗中拍摄的,但我读到它在某个地方为某人工作。
不幸的是,这些都没有解决奇怪的行为。任何帮助理解和解决这种情况非常感谢!
你可以发布C++部分吗?特别是购买后的回调。 – Losiowaty
@Losiowaty你对C++语法或其他东西感兴趣吗?语法没有太多问题。将函数命名为'void Java_org_cocos2dx_lib_Cocos2dxActivity_MyAwesomeFunction'。在Java代码中,您将有'公共静态本地无效MyAwesomeFunction();' – SundayMonday