編輯:所以問題出現在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